ASP.NET Session State Kullanımı
20-11-2013Karmaşık bilgilerin, nesneler gibi, kaydedilmesi için kullanılan bir metod’tur. Bu yöntem ile her tür veri kaydedilebilir. Bu bilgi server tarafından tutulduğu için hiçbir zaman kullanıcı browser’ında görülemez.
Session'da bir kullanıcının alışveriş sepeti bilgilerini tutabiliriz. Kullanıcı ödeme sayfasına geldiğinde sepetine eklemiş olduğu ürünleri session'dan çekerek gösterebiliriz.
ASP.NET her session’u, proprietary algoritması ile oluşturulmuş 120 bit uzunluğundaki bir identifier kullanarak kayıt eder. Bu sayede zararlı yazılımlardan session bilgileri korunmuş olur. Bu identifier server ile browser arasındaki iletişimi sağlar. Session State’ti dikkatli kullanmak gerekir; çünkü çok fazla sayıda kullanıcı’nın server’a bağlanmasıyla, session bilgisi küçük olsa dahi performans düşebilir.
Örnek:
Furniture Sınıfı
public class Furniture { private string name; public string Name { get { return name; } set { name = value; } } private string description; public string Description { get { return description; } set { description = value; } } private decimal cost; public decimal Cost { get { return cost; } set { cost = value; } } public Furniture(string name, string description, decimal cost) { Name = name; Description = description; Cost = cost; } }
Session.aspx Sayfası
protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { // Furniture nesneleri yaratilir. Furniture piece1 = new Furniture("Econo Sofa", "Acme Inc.", 74.99M); Furniture piece2 = new Furniture("Pioneer Table", "Heritage Unit", 866.75M); Furniture piece3 = new Furniture("Retro Cabinet", "Sixties Ltd.", 300.11M); // Session’a dictionary collection mantigi ile kayit edilir. Session["Furniture1"] = piece1; Session["Furniture2"] = piece2; Session["Furniture3"] = piece3; } }
SessionKullan.aspx Sayfası
protected void Page_Load(object sender, EventArgs e) { if Session != null) { Furniture mobilya=(Furniture) Session["Furniture1"]; } }
Bazı durumlarda Session State bilgisi kaybedilebilir :
1. Browser kapatıldığında veya restart edildiğinde kaybedilir.
2. Aynı sayfaya farklı browser’lardan erişim olursa session hala var olsa bile kaybedilir.
3. Inactivity’den dolayı session timeout olduğunda kaybedilir. Session timeout bilgisi web.config dosyasındaki configuration bölümünde bulunmaktadır.
4. Session.Abandon() metodunun çağrılmasıyla session bilgisi kaybolur.
1. ve 2. durumlarda session bilgisi hala web server’da kayıtlıdır; çünkü server, browser’ın kapatılıp kapatılmadığını bilemez.
HttpSessionState sınıfının Metodları ve Özellikleri:
Page sınıfının Session Property’si System.Web.SessionState.HttpSessionState türünden olduğu için bu sınıfın özelliklerini incelemekte fayda vardır.
- Count : Session collection içerisinde bulunan eleman sayısını belirtir.
- IsCookieless : Eğer kullanıcı bilgisayarında cookie aktif değilse, modifiye edilmiş URL ile session işleminin yapılıp yapılmadığını ifade eder. Yapılmışsa true değerini alır.
- IsNewSession : Kayıtlı olan Session elemanlarından biri kullanıldıktan sonra değeri false olur.
- Mode : Session bilgisinin nasıl tutulduğu ile ilgili bilgi verir.
- SessionID : Session id’yi dönderir.
- TimeOut : Session'un ne kadar süre etkin olacağını gösterir. Bu süreyi
Session.TimeOut=10
şeklinde set edebiliriz. - Abondon(): Session.Abandon() şeklinde kullanılır. Kullanıldığı zaman session bilgisini siler. Logout işleminden sonra bu metodu çağırabiliriz.
- Clear(): Tüm session item’larını siler ; fakat current session identifier’i değiştirmez.