Asp.Net uygulamalarında SessionState yönetimi

Asp.Net uygulamalarında kullanıcı ile ilgili sürekli erişilmesi gereken bilgileri her seferinde veritabanından sorgulamak yerine daha hızlı erişebilmek amacıyla HttpContext Class sınıfının içinde yeralan ve HttpSessionState Class tipinde olan Session property’si içerisinde tutabiliriz.

Uygulamada Session yapılandırmak için basitçe web.config dosyasına aşağıdaki elementi eklememiz yeterlidir;

timeout attribute ile kaç dakika boyunca kullanıcı işlem yapmazsa session‘daki değişkenlerinin temizleneceğini belirliyoruz.

mode attribute ile session değişkenlerinin tutulacağı yeri belirliyoruz. Seçenekler;

InProc

Uygulamanın çalıştığı sunucunun RAM hafızasında. Uygulama, çalıştığı sunucunun RAM hafızasına çok hızlı erişebileceği için tek sunuculu ortamlarda genellikle bu seçenek tercih edilir.

StateServer

Uygulamanın çalıştığı sunucunun veya başka bir sunucunun RAM hafızasında. Session bilgileri hala RAM’de tutulduğu için hızlı erişilebilir, birden fazla sunuculu ortamlarda session bilgileri ortak bir yerde tutulduğu için genellikle bu seçenek tercih edilir. Örneğin, uygulamamız 2 sunucuda çalışıyorsa, kullanıcının session değişkenleri Sunucu1’de oluştuğunda Sunucu2 için böyle bir kullanıcı hiç varolmayacaktır. Eğer kullanıcının herhangi bir isteği Sunucu2 sunucusuna yönlenecek olursa, Sunucu2 bu isteği işleyemeyecektir. Bu sorunu çözmek için session bilgilerini Sunucu1 veya Sunucu2 üzerinde tutmak yerine, ortak bir StateServer üzerinde tutabiliriz.

SQL Server

Tıpkı StateServer seçeneği gibi çalışır, farklı olarak session bilgileri RAM hafızada tutulmaz, SqlServer‘da oluşturulan tablolarda tutulur. StateServer‘a göre daha yavaştır (veritabanında sorgulama, kayıt ekleme, güncelleme adımları da araya girdiği için)

Fakat StateServer kapanıp açılacak olursa, RAM hafıza temizleneceği için, session bilgileri kaybolur, SqlServer‘da ise, kaybolmaz.

İlgili diğer makaleler

blog comments powered by Disqus

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı