Bilmek istediğin her şeye ulaş

Asp.Net'te bilgilerini session üzerinde tuttuğum kullanıcının, aynı kullanıcı adı ve şifre ile başka bir cihazdan giriş yaptığında, bir önceki oturumunu sonlandırmak istiyorum. Nasıl bir yöntem izlemeliyim?

Üye tablomda giriş tarihi her girişte güncelleniyor fakat ben üye tablosuna birde oturumID alanı ekledim. Bu oturumID giriş anındaki microtime değerinin md5 e çevrilmiş hali.

oturumID'nin yanında eposta adresini veya kullanıcı adını kullanarak, tek kullanımlık aktivasyon linki, otomatik giriş çerezleri ve yeni giriş ile eski oturumu sonlandırma işlemlerini gerçekleştirebiliyorum.


Teknik olarak microtime ile yine senin kullandığın giriş tarihini kullanmış oluyorum. Onun yanı sıra birde md5'e çevirince tek kullanımlık parola sıfırlama vs. linklerde de kullanabiliyorum, linklerde daha gövenilir bir görüntü oluyor.

Ayrıca rüyada programlama her programcıya lazım, nasıl yapıyoruz onu bi tarif ediversene : D
  • Paylaş
2

Birkan Aydin, Herhangi bir meditasyon olayı falan yok :), sadece sabah kalktığımda, programın o kısmını daha önceden kodlamış olarak uyanıyorum :) Garip ama gerçek :)

Orhan Tutum, Tuttum bunu, darısı başımıza. :)

Sorunun cevabını dün akşam rüyamda buldum :)

Veritabanına userid ve date_time olan kolonları olan yeni bir tablo1 ekledim. Hemen akabinde, user login kodunu yazmış olduğum yerde, tablo1 içerisinde kullanıcı kayıtlı ise giriş tarih& saatini güncelliyorum değil ise kullanıcıyı userid 'si ile birlikte ekliyorum. Aynı zamanda eklemiş olduğum tarih& saati session içerisinde tutuyorum. Masterpage içerisinde aşağıdaki javascript kodunu ekledim.

  function BlockUser() {
                  
                   var param = "";
                   $.ajax({
                       type: "POST",
                       url: "ServerControl.asmx/BlockUser",
                       data: param,
                       contentType: "application/json; charset=utf-8",
                       dataType: "json",
                       success: SetBlockUserSucceed,
                       error: SetBlockUserFailed
                   });
               }
               function SetBlockUserSucceed(result) {
                   var sonuc = result.d;
                   var metin = sonuc.split(';');//ikinci parametre lazım olabilir.
                   if (metin[0] == 'true')
                   {
                       alert("Oturum Farklı Bir Noktada Açıldı.");
                       window.location = "/Login.aspx";
                   }

               }

               function SetBlockUserFailed() {
                  //Henüz karar vermedim.
               }
              window.load = setInterval('BlockUser()', 1000);




Daha sonra asp.net tarafında ServerControl.asmx içerisine aşağıdaki kodu yazdım.

        [WebMethod(EnableSession = true)]
        public string BlockUser()
        {
            string msg = "";
            if (HttpContext.Current.Session["Kullanici"] != null)
            {
                string Userid = HttpContext.Current.Session["Kullanici"].ToString();
                DataTable table = vt.Sorgu("Select Date_Time from BlockUser Where UserID = " + Userid, "E98J584JRIRJYTIY");
                if (table.Rows.Count > 0)
                    if (table.Rows[0][0].ToString() != Session["BlockUser"].ToString())
                    {
                        msg = "true;param"; //Yönlendirilecek sayfa ileride değiştirilebilir. ikinci parametre olarak gönder.
                        Session.Abandon();
                    }
                    else
                    {
                        msg = "false;param";
                    }
            }
            return msg;
        } 


Oluşturmuş olduğum demo şimdilik bu şekilde işimi görüyor. Çalışma mantığını yazıya dökmem gerekirse, her kullanıcı table1 de kendi giriş tarihini güncelliyor ve javascript ile saniyede bir halen giriş tarihi kendi giriş tarihimi diye kontrol ediyor. Farklı bir bilgisayardan ya da cihazdan aynı kullanıcı adı ile giriş yapıldığında table1 içerisindeki date_time değiştiğinden dolayı bir önceki oturuma ait sessionları öldürerek sayfa yönlendirmesini gerçekleştirebiliyorum.

Bu çözümün haricinde, çözüm üreten varsa ya da var olan çözümü geliştirebilecek arkadaşların cevaplarını 4 gözle bekliyorum :)
  • Paylaş
3

Sinan D, buna klasik yöntem diyebiliriz :) çok komplex bir yapı yoksa iş görecektir,
eğer iis8 kullanıyorsan websocket denemesi de yapmış olmak için websocket'le de çözebilirsin.

senin yöntemin eksik yanı server tarafında kontrol koymamış olman, mesela biri login olup session bilgilerini aldıktan sonra senin pencereyi kapatsa veya javascript'i engellese, senin sistem çalışmaz, adam istediği gibi request göndermeye devam eder.

Birkan Aydin, iis8 'e geçmem şu an için pek olası görünmüyor. Server taraflı kontrol için verebileceğiniz bir tavsiye var mıdır?

Resul Genç, sever taraflı kontrol için aynı değeri cookie oluşturarak ve bunu server taraflı kontrol edebilirsin.

Sonraki Soru
HESAP OLUŞTUR

İstatistikler

52 Görüntülenme4 Takipçi2 Yanıt

Konu Başlıkları