Kullanıcıya Ait Cevap
Oturum açma ile ilgili. Kullanıcı kullanıcı adı ve şifresi ile bir bilgisayarda oturum açtığında, aynı kullanıcı adı ve şifre ile başka bir bilgisayarda oturum açmasını nasıl engelleyebiliriz.
Ya da bir önceki nin kapanmasını nasıl sağlayabilriz. Bir çok çözüm düşündüm ancak Application faaliyet alanının doğasını tam olarak çözememem nedeniyle başarısız oldum.
Düşüncem şu yönde idi.
Kullanıcılar sisteme giriş yaptıklarında Application faaliyet alanında oturum açan kullanıcıların bilgilerini tutan bir havuz oluşturmayı planladım. Kullanıcı ile bağlantılı bir veriyi burada saklamayı düşündüm.
Kullanıcı giriş yapmayı denediğinde -örneğin kullanıcı adını Application da depolamış isem- havuz içerisinde bulunan kayıtlar arasında bir kontrol yaparak kullanıcı girişine izin vermeyi yada kısıtlama getirmeyi planlıyordum. içinden çıkamağıdım nokta kullanıcılar siteyi terk ettiklerinde yani oturumları kapandığında, oluşması gerekli olayları hayal edememiş olmam.
Bir de diyelim 30-40 bin kullanıcının online olması olası bir uygulamada bu şekilde Application faaliyet alanına yüklenmenin ColdFusion’un doğası üzerinde yapacağı etkiden tedirgin oldum.
Yani kısaca yapamadım.
Etkinlikler
Yarışma
Fikir10000 Dijital Pazarlama Fikir Yarışması
Fikir10000 Dijital Pazarlama Fikir Yarışması
ADTECH tarafından düzenlenen Fikir10000 yarışmasına; dijital pazarlama ile ilgili size ait olan fikrinizle katılabilir ve 10.000 YTL’lik birinci...
Kategori:
Yarışma
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 689 (2 kayıtlı, 687 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız








Faydalı cevap
Evet kullanıcı sayısı epey fazla, bu durumda Application kapsamı yerine veritabanı kullanacağız. Ayrıca böylece çözümümüz ‘Cluster destekli’ olacak.
Veritabanında kullanıcıların kayıtlı olduğu bir KULLANICI tablosu olduğunu varsayıyorum. Bu tabloya NULLABLE bir LOGIN_ID alanı eklemeliyiz. Bu alandaki değer eğer NULL ise bu üyenin şu an oturum açmadığı anlamına gelir. Bu alanda oturum açan kullanıcı için bir UUID kaydedeceğiz.
Kullanıcı oturum açarken kullanıcı adı ve şifre kontrolü yapıp veritabanından kullanıcı bilgileri getirerek kullanıcının oturum açıp açamayacağına karar verdiğimiz yerde ilave olarak bu LOGIN_ID’yi de kontrol edeceğiz.
boş/null ise kullanıcının oturum açmasına izin vereceğiz ve kullanıcının
bilgilerini bu LOGINID’ye kaydedeceğiz (update işlemi). (Eğer LOGINID için
ile başka bir UUID kullanırsanız Session kapsamına da bu değeri kaydedin, çünkü sonra her request için karşılaştırma yapacağız)
Eğer LOGIN_ID dolu ve kullanıcının şu an ki
bilgileri ile aynı ise kullanıcıya yine izin vereceğiz. (Eğer varsayılan 20 dakika kalıcı çerezli session ve cflogin framework’ünü bir arada kullanıyorsanız bu gerekli)
Fakat LOGIN_ID dolu ve içerdiği değer
‘dan farklıysa kullanıcıya bu kullanıcının zaten oturum açmış olduğunu mevcut oturumu kapatarak oturum açmak isteyip istemediğini soracağız. Kullanıcı evet derse LOGIN_ID’ye yeni CFID:CFTOKEN’ı kaydedeceğiz ve oturum açmasına izin vereceğiz.
Ayrıca her request için aktif oturumun geçerli olup olmadığını kontrol etmek durumundayız. Bu kontrolde LOGIN_ID ile CFID:CFTOKEN’ı karşılaştırırız. Eğer farklıysa bu kullanıcının oturumu artık geçersiz demektir.
Son olarak kullancı kendi isteğiyle oturumu kapattığında ve session timeout olduğunda (artı eğer cflogin framework’ünü kullanıyorsanız login timeout olduğunda, ki login, session’dan önce timeout olabilir) kullanıcının veritabanı kaydındaki
yapın.
(Not: Application.cfc kullanırsanız onSessionEnd() metodu session timeout olduğunda otomatikman çalışıyor! Aksi taktirde session timeout’u Java’ya girerek anlamak zorundasınız veya her request için login geçerliliği kontrolü yapmak yerine mevcut açık oturumu başka bir oturumdayken kapatmak zorundasınız (ki bu bir hile ile yapılabilir, o yüzden önerilmez). Eğer session timeoutu algılatamıyorsanız, sorun değil, bu çözüm yine de çalışır)
Bu çözümü performans açısından irdeleyelim. Sistemi etkileyebilecek fazladan iki sorgu yapıyoruz: biri oturum açıldıktan sonra yapılan update işlemi, diğeri de her request için yaptığımız oturum geçerlilik kontrolü. Her iki işlemde
yani Primary Key alan kullanılarak yapılacağı için performansı çok az etkileyecektir. Ayrıca MySQL değilde daha gelişmiş SQLServer veya Oracle gibi veritabanları kullanıyorsak bu veritabanları update işleminde sadece ilgili satırı kilitlediğinden KULLANICI tablosu üzerindeki diğer işlemler normal şekilde çalışacaktır.
Evet bu yöntem her yönden gayet iyi (yine de ek öneriler ve düzeltmelere açığım elbette). iyi çalışmalar,