08 December 2016

ASP.Net Session State

İstemci bir web sunucusuna bağlanıp bir ASP.NET sayfası talep ettiğinde sunucu istemciye bir SessionID atar ve bu SessionID’ yi istemciye gönderir. Artık istemcideki web tarayıcısı kapatılıncaya kadar bu SessionID, sunucuda saklı kalır. SessionID sayesinde sunucu, iletişim içerisinde olduğu istemcileri birbirinden ayırabilir.

Default sayfasını aşağıdaki şekilde düzenleyelim:

<asp:Button ID="btnGonder" runat="server" Text="Gönder"
 onclick="btnGonder_Click" />
 <hr />
 <asp:Label ID="lblSonuc" runat="server" Text="Label"></asp:Label><br />
 <asp:Button ID="btnArttir" runat="server" Text="Arttir"
 onclick="btnArttir_Click" />

Kod kısmına yazalım

protected void btnGonder_Click(object sender, EventArgs e)
 {
 Session["data"] = "Can";
 Response.Redirect("webform1.aspx");
}
 int rakam = 0;
 protected void btnArttir_Click(object sender, EventArgs e)
 {
 if (Session["sayi"] == null)
 {
 rakam++;
 Session["sayi"] = rakam;
 }
 else
 {
 rakam = Convert.ToInt32(Session["sayi"]);
 rakam++;
 Session["sayi"] = rakam;
 }
 lblSonuc.Text = rakam.ToString();
}

Arttır düğmesine tıkladıkça lblSonuc içerisinde sayılar birer birer artar. Her düğmeye basışta sayfa sunucuya gönderilir. Sayi değişkeni session içerisinde saklandığı için değerini korur. Böylece eski değerden yararlanarak onu birer birer arttırabiliriz. Session değişkendeki bir değeri almak için uygun tip dönüşümlerini yapmaya özen göstermeliyiz.

private void Page_Load(object sender, System.EventArgse)
 {
 Response.Write(Session.SessionID);
 }

Tarayıcıda sayfaya baktığımızda 0vxururlzx1fzeit3sucf1nf benzer bir yazı görürüz. Yeni bir tarayıcı penceresi açıp aynı sayfaya yönlendirdiğimizde bu yukarıdaki kelimenin tamamen değişiği olan yeni bir SessionID değeri ekrana yazılır.

WebConfig’in içine aşağıdaki kodu yazarsak cookie kapalı browserde sesion hatası vermesini önleriz.

<sessionState cookieless="true" timeout="1"></sessionState>