Asp.Net Durum Yönetimi

    ->Web sayfalarında sayfa ile server arasındaki iletişim ,  HTTP protokolü ile gerçekleştirilir. Bu protokolde sunucuya gönderdiğimiz bilgiler, kendi bilgisayarımızda kalıcı değildir. Biz bir istek gönderdiğimizde sunucuda sayfamızın bir örneği oluşturulur.Gönderdiğimiz bilgiler sunucuya gider ve orada işlenir. İşlendikten sonra sayfanın örneği, sunucudan silinir.Bu gönderdiğimiz verilere tekrar erişebilmek ve bunları taşıyabilmek için durum yönetimi kontrolleri geliştirilmiştir.

 ->Yazdığımız masaüstü programlarda global değişkenler tanımlayarak, istediğimiz yerlerde atadığımız bilgilere erişebiliyorduk.Durum kontrolleri, masaüstü programlamadaki global değişkenlerin görevini üstlenir

    ->Bu bilgiler istemci ve sunucu tarafında saklanabilir.Eğer istemci tabanlı durum yönetimlerini kullanırsak her istemci için sunucuda bir yer ayrılır.Bu sayfanın kullanıcısı çok olursa, bu bilgilerin server tarafında tutulması zorlaşacak ve belki de sunucu isteklere yanıt veremeyecektir.Ayrıca istemci taraflı kontrolleri kullanırsak güvenlik açısından sıkıntı oluşturur.Eğer Sunucu taraflı kontrolleri kullanırsak bu güvenlik sorunu en aza iner.Şimdi bu durum yönetimlerini inceleyelim;

 

  İstemci tabanlı durum yönetimleri;

  • View State
  • Hidden Form Field
  • Cookie
  • Query String

 

VİEWSTATE

     ViewState nesnesi ASP.NET’te form düzeyinde verileri saklamak için kullanılır.Yani Sayfa geçişleri arasında verileri saklamak için kullanılır.Asp dilinde kod yazarken postback işlemi sonrasında veriler kayboluyordu.Bunun önüne geçmek için viewstate nesnesi kullanılmaya başlandı.Bu sayede sayfa postback olduğunda verilerin, form üzerinde saklanması sağlandı.Kısaca açıklayacak olursak tarayıcı ve sunucu arasında bilgi alışverişi yapar.Sunucuya gönderilen değerler viewstate içinde saklanır ve tarayıcıya dönen değerler, viewstate içerisine depo edilerek gönderilir.Bu nesnenin olumsuz yönü,biliçsiz kullanıldığında kontrolün içi şişer ve performansı azalır

  Bu kontrolün EnableViewState özelliği ile kontrolün özelliklerinin ViewState içerisinde taşınılıp taşınılmayacağı belirlenir ve varsayılan değeri true dur.Bu durumda sayfa postback olduğunda verilerimiz viewstate içerisinde saklanır.Bunu false olarak ayarlarsak veriler viewstate içerisinde taşınmaz.Bu özellik,sayfanın load olayında false edilmek istenirse;

Page.EnableViewState = false; olarak ayarlanmalıdır

Eğer uygulama düzeyince kapatmak istiyorsak web.config dosyasında <system.web> altında <pages enableviewstate=”false”> </pages> yapılarak kapatılabilir.

QUERYSTRİNG

    QueryString ile taşınacak olan veri,URL aracılığı ile diğer sayfalara taşınabilir. Taşınacak veriler, sayfanın adı yazıldıktan sonra ? işareti ile başlayan kısımda anahtar-değer şeklinde taşınmaktadır. Bu yöntem kullanım kolaylığı ve sunucuya getirdiği yükün az olması nedeni ile pek çok yazılımcının tercihi olmaktadır ve hemen hemen her site bu yöntemi kullanmaktadır.Fakat QueryString ile taşınan veriler kullanıcılar tarafından görüntülenebilmektedir ve dolayısıyla bir güvenlik açığı oluşturmaktadır. Kullanıcılar, bu verileri istedikleri şekilde değiştirip yönlendirilen forma farklı veriler gönderip farklı işlemler yapılmasını sağlayabilirler. Bu sorunu aşmak için veriler bir şekilde şifrelenerek gönderilse bile sonuçta verinin şifrelenmiş halini kullanıcılar görebileceklerdir. Bir takım yöntemlerle kullanılan şifreleme algoritması çözülüp yeniden şifrelenerek yine farklı bir veri gönderilebilir.Dolayısıyla, QueryString’e çok fazla güvenip çok önemli veriler taşımamak gerekir

Örnek verirsek ;

protected void Button1_Click(object sender, EventArgs e)
 {
 Response.Redirect("Sayfa2.aspx?veri1=Mehmet&veri2=Kirazlı");
 }

 

protected void Page_Load(object sender, EventArgs e)
 {
 string metin= Request.QueryString["veri1"];
 string metin2 = Request.QueryString["veri2"];
 Response.Write(metin + "  " + metin2);
 }

 

  Burada butona tıklandığında Response.Redirect içerisinde bulunan veri1 ve veri2 değişkenlerindeki bilgileri sayfa2 ye yollar.Sayfa2.nin load olayında ise bu bilgiler alınarak değişkenlere atılır ve ekrana yazılır.Sayfa1 de gönderilcek 2 parametre birbirinden & simgesi ile ayrılır.Sayfa2 de veriler, Request.QueryString ile alınır.

 COOKİE(ÇEREZLER)

    İstemci bilgisayarda saklanan, kullanıcı bilgilerinden oluşan .txt uzantılı dosyalardır.Cookie adlı dizin altında tutulurlar.eğer kullanıcı isterse çerezlerin bilgisayarında saklanmasını engelleyebilir.Çerezler, genelde 4096 byttır.Cookie’lerin kullanıcı bilgisayarında ne kadar süre saklanacağı da belirtilebilir. Cookie nesnesinin en önemli avantajlarından biri uzun süre istemcinin bilgisayarında taşınabileceği için farklı zamanlarda erişilebilir olmasıdır.Asp.Nette Cookie ler HttpCookies sınıfından türetilirler.HttpCookies sınıfından oluşturulacak nesne örneği üzerinden istemcinin bilgisayarına Cookie bilgilerinin yazılması, okunması ve bu bilgilerin ne kadar süre boyunca aktif tutulacağı gibi işlemlerin yapılması sağlanabilir

Şimdi web sayfamızda tasarımı şu şekilde yapalım;
cookie

 

Cookie’e at butonuna tıklayınca textbox’a girilen veriyi cookie ‘ ye atar ve oku okutonuna basılınca Label üzerinde gösterir

protected void Button1_Click(object sender, EventArgs e)
 {
  HttpCookie cerez = new HttpCookie("Cookie");
  cerez["ad"] = TextBox1.Text;
  cerez.Expires = DateTime.Now.AddDays(1);
  Response.Cookies.Add(cerez);
 }
protected void Button2_Click(object sender, EventArgs e)
 {
  HttpCookie cerezOku = Request.Cookies["Cookie"];
  Label1.Text = cerezOku["ad"];
 }

 

Buraki kodların birkaçını açıklayalım;

cerez[“ad”] = TextBox1.Text; =>ad ismindeki Cookie anahtarına girilen değer atar
cerez.Expires = DateTime.Now.AddDays(1); =>Cookie nesnesinin 1 gün boyunca geçerli olacağını belirtir
Response.Cookies.Add(cerez);  => cerez içerisinde taşınan değerlerin bir Cookie olarak istemcinin bilgisayarına
eklenmesini sağlar

Çıktı ise şu şekilde olur;
cookies

 

Sunucu tabanlı durum yönetimleri;

 

SESSION (OTURUM)

   Sunucudan bir sayfa talep edildiğinde, web sunucusu her kullanıcı için bir oturum başlatır. Session nesneleri ile kullanıcı bilgilerini oturum boyunca sayfalar arasında taşıyabiliriz. Örneğin alışveriş sitelerinde sepete eklenenleri session ile sayfalar arasında taşıyabiliriz.Sessionda taşınan veriler  tüm sayfalardan erişilebilir.Yine alışveriş sitelerinde oturum kapatıldığında bu veriler silinir.Yani session nesnesinde saklanan veriler,sayfa kapatıldığında sona erer.Session daki veriler server tarafında tutulduğu için kullanıcı siteyi terk ettiğinde Session’daki bilgilerin temizlenmesi isteniyorsa muhakkak oturum sonlandırılmalıdır.Session içerisinde çok kritik veriler saklanabilmektedir ve bu sebeple Session mutlaka sonlandırılmalıdır.

    Session; oturum zaman aşımına uğradığında, kullanıcı pencereyi kapattığında, kullanıcı oturumu kapattığında sonlanır

  ASP.NET’te her kullanıcı için oturum başlatılır.Aynı bilgisayarda bile olsa siteye erişen her tarayıcı penceresi için bir oturum başlatılır.Oturum açan her kullanıcı için SessionID üretilir.Sessionda saklanan değerler,istemciye gönderilmez sadece sessionID değeri gönderilir.Bu yüzden bu yöntemler arasında performansı en yüksek olanlardan biridir

  Session’da veri aktarma yöntemi,viewstate ile benzerlik gösterir.Session[“keyAdi”]=deger veya Session.Add(“keyAdi”,deger) ile session nesnesine değerler atanır.Veri okurken de Session[“keyAdi”] ile okuma yapılır

 

Bunlara bir örnek verelim ve konuyu daha iyi anlayalım;

   Oturum kontrolü üzerinde örneğimizi anlatalım.Sayfamız ilk yüklendiğinde eğer oturum açmış bir kullanıcı yoksa sadece hoşgeldin yazsın.Eğer oturum açan biri ise hoşgeldin ” kullanıcının ad ı” yazsın.Bunun için Default.aspx sayfamıza 1 label 1 textbox ve 1 buton ekliyoruz.Eğer oturumu açık olan biri giriş yaptıysa Label üzerinde hoşgeldin “kullanıcı adı” yazacak.Eğer yok ise Textbox’a kullanıcı adı girilecek ve oturum aç butonuna basılınca Profil.aspx sayfasına gidilecek.O sayfada ise Hoşgeldin Mehmet tarzında bir mesaj verilecek ve oturum kapatılacak yani session nesnesinin içerisi temizlenecek.Default.aspx sayfasının Page_Load olayına aşağıdaki kodları yazalım;

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["Kullanici"]==null)
    {
    Label1.Text = "Hoşgeldiniz";
    }
    else
    {
    Label1.Text = "Hoşgeldin" + Session["Kullanici"].ToString();
    }
}

Şimdi de Default.aspx sayfamızdaki Oturum aç butonunun Click olayına aşağıdaki kodu yazalım;

 Session.Add("Kullanici", TextBox1.Text);
 Response.Redirect("Profil.aspx");

Son olarak da Profil.aspx sayfamızın load olayına şunları yazalım;

protected void Page_Load(object sender, EventArgs e)
 {
   if (Session["Kullanici"] == null)
   {
   Response.Redirect("Default.aspx");
   }
   else
   {
   Response.Write("hoşgeldin " + Session["Kullanici"]);
   Session.Abandon();
   }
   }
}

    Buradaki kodları şimdi anlatalım.İlk olarak Default.aspx sayfamız çalışacağı için ve burada hali hazırda bir kullanıcı oturumu olmadığı için sadece Hoşgeldin yazısı çıkacaktır.Textbox’a Mehmet yazısını yazıp oturum aç’a tıklayınca Profil.aspx sayfasına gidecek ve bu sayfanın Page_Load olayında oturum açmış bir kullanıcı olduğu için else kısmına girecek ve ekrana Hoşgeldin Mehmet yazısını yazacaktır.Mehmet ismi ise Session[Kullanici] nesnesi ile taşınıyor.Daha sonra bu session’u Session.Abandon(); ile kapatıyoruz.Çünkü proje tekrar çalıştırıldığında oturum açmış bir kullanıcı olacaktır.Biz örneğimizde bunun olmasını istemiyoruz

APPLICATION STATE

   Sitenin genelini ilgilendiren bilgilerin tutulabildiği nesne Application nesnesidir. Application nesnesi global bir değişken gibi düşünülebilir. Siteye erişen her kullanıcı aynı bilgileri görüp değiştirebilmektedir. Application nesnesinde de veri saklanırken, tıpkı Session ve ViewState nesnelerinde olduğu gibi anahtar-değer çiftleri kullanılır. Session ve ViewState nesnelerinde her anahtarda tutulan değer kullanıcıya özgü bir değerken, Application nesnesinde tutulan değer tüm kullanıcılar için ortak olmaktadır.Application nesnesine veri eklerken Application.Add(“key”, “deger”) ya da Application[“key”] = “deger” sözdizimi kullanılırken, Application nesnesinden veri okumak için Application[“key”] sözdizimi kullanılmaktadır

  Global.asax dosyasında 5 adet olay yakalayıcı metod bulunur.Bu metodlar,yanındaki olaylar olduğunda tetiklenir

Application_Start =>Uygulama ilk defa çalıştırılırken tetiklenir
Application_End =>Uygulama bilinçli bir şekilde kapatılırken tetiklenir
Application_Error =>Uygulamada bir hata oluştuğunda tetiklenir
Session_Start =>Web sitesinde yeni bir oturum açıldığında tetiklenir
Session_End =>Web sitesinde bir oturum sonlandığında tetiklenir

 

 

 

Benzer Yazılar

Yorumlar

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla