Login Sayfalarında "Beni Hatırla" (Cookie)

by Behlul 6. February 2007 07:33

Üyelik sistemlerinde sıklıkla karşılaşılan sorulardan biri de "Beni Hatırla" özelliğidir, makalemde Cookie kullanarak "Beni Hatırla" opsiyonunu login sayfalarına nasıl adapte edebileceğinizi anlatacağım.

Web sitesinin kullanıcıları hatırlaması için bir çok yöntem var. Örneğin Mac adresini kullanıcı ile eşleyerek veritabanına yazmak bunlardan biri. Fakat hem kullanım alanının çok verimli olmayışı hem de kullanılabilirliliğinin azlığı nedeniyle pek kullanılan bir yöntem değildir. Diğer ve etkin bir yöntem ise Cookiler.

Cookiler kullanıcı tarafında  saklanan text tabanlı dosyalardır. Bu dosyaların yönetimi, içeriği ve erişimi tamamen cooki'yi yaratan web sitesine aittir. Cookilerin ömürlerini biz belirleyebildiğimiz gibi, içerik değişiklikleri, silinmesi, expire olması gibi tüm özelliklerini de server tarafından yönetebiliriz. Ayrıca kullanıcı isterse cookieleri kapatabileceğinden yada internet tarayıcısı üzerinde bunları rahatlıka temizleyebileceğinden, tüm sistemi kesinlikle cookiler üzerine kurmamalıyız.  Bu yazıda Cookileri web sitesine giriş yaparken, kullanıcıyı hatırlamak için gerekli olan değeri kullanıcının bilgisayarına (Client Side) kaydederek saklamak için kullanacağız. Cookiler kullanıcı tarafında saklandığı için potansiyel güvenlik açıklarını da beraberinde getirir. Bu nedenle, kullanıcıyı tanımlamada kullanacağımız bilgiler, sistemimizi minimum düzeyde tehlikeye sokacak düzeyde olmalıdır. Bu nedenle cookie de saklanacak veri kullanıcı adı ve şifresi olmamalıdır.

Cookie yönetebilen bir login.aspx nasıl olmalı :

Bu uygulamada cookilere yazıcağımız değeri şifrelemek yerine veritabanında unique indetifier olarak tanımladığımız UserId ile dolduruyoruz. Bu bize cookie okunduğu zaman o kullanıcıyla ilgili herhangibir bilginin dışarı sızmasını engelliyor.

Bu sistem bize projemizin business tarafında kullanıcıadı ve şifre denetleyerek kullanıcları tanıma yönteminin dışında UserId kullanarak kullanıcı tanımlama fonksiyonuna ihtiyacımız olduğunu gösteriyor.

Öncelikle buttonumuzun click eventini yazalım:

 

     Cookie.buss buss = new Cookie.buss(); 
     DataTable user = new DataTable();   
     user = buss.GetUser(TextBox1.Text.Trim(), TextBox2.Text.Trim());
//ekrandan girilen kullanıcı adi ve şifreyi doğrulayan kullanıcı varmı?
         
if (user.Rows.Count>0)
         {
            
if (CheckBox1.Checked) //Beni hatırla checkbox'ı
            {
             Response.Cookies[
"behluluser"].Value = user.Rows[0]["UserId"].ToString(); //Cookiemizi yaratıp guid'imizi içine yazalım.
             Response.Cookies[
"behluluser"].Expires = DateTime.Now.AddYears(30);  //Cookiye 30 yıl yaşama şansı verelim.
            }
          Response.Redirect(
"http:\\www.behlulbehram.com"); //kullanıcı başarıyla girdi istediğimiz sayfaya yönlendirelim.
         }
        else 
            Label1.Text = "kullanıcı bulunamadi";

 

Not: Farklı windows kullanıcıları aynı siteye girselerde farklı cookiler yaratılır. Birbirlerini ezmezler. Örneğin A kişisi sistemimize girip beni hatırla derse
A'nın "behluluser" cookie'si yaratılır. Aynı bilgisayaradan B kişisi accountunu açip sisteme giriş yapıp beni hatırlayı seçerse B'nin "behluluser" cookiesi yaratılır.

Şimdide login.aspx'in page loadunda  nasıl bir işlem yapmalıyız onu görelim;

if (!IsPostBack)
{
   if (Request.Cookies["behluluser"] != null)//Kullanıcı Tarafında daha önceden yarattığım Cookie Varmı? 
   

      Cookie.
buss buss = new Cookie.buss();
      
DataTable user = new DataTable();

      
string myguid= Request.Cookies["behluluser"].Value; 
      user = buss.GetUserById(myguid);
         
if (user.Rows.Count > 0)//cookiedeki user gerçekten database de de var
            
{
               Response.Redirect(http://www.behlulbehram.com);
            }
        
else//cookie deki bilgi yanlış  biri oynamış ... silelim.
            
{
              Response.Cookies[
"behluluser"].Expires = DateTime.Now.AddYears(-30);
            }
   }
}

not: Cookileri silmek yerine expire etmek daha verimli bir yöntemdir.

ve login.aspx'i tamamlamış olduk. Derleyip çalıştırabiliriz.

Umarım cookileri nasıl kullanıcağımızla ilgili azda olsa fikir sahibi olmuşsunuzdur.

Sorularınız için

behlul.behram@bilgeadam.com
behlulbehram@gmail.com

Tags:

Coding

Microsoft Tag

www.behlulbehram.com

Behlül Behram Kimdir?

2004 yılında Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümünden mezun oldu. 2000 yılından günümüze kadar C, C++, VB, VB.NET, C# dilleri ile bir çok proje yaptı. Halen Türkiyenin önde gelen bilişim firmalarının birinde   "Yazılım Geliştirme Uzmanı" olarak çalışmaktadır...


Yandex.Metrica