ASP.NET Oturum Yönetimi [Örnek]
⚡ Akıllı Özet
ASP.NET Oturum Yönetimi, durumsuz bir HTTP uygulamasının istekler arasında kullanıcı verilerini hatırlamasını sağlar. Bu bölümde ViewState, anahtar-değer çiftlerini saklamak için kullanılan Session nesnesi, çalışan bir örnek, oturum durumu modları, zaman aşımı yapılandırması ve oturum durumunun avantajları açıklanmaktadır.
ASP.NET Oturum Yönetimi
Tüm web uygulamalarının üzerinde çalıştığı HTTP protokolü durum bilgisi olmayan bir protokoldür. Vatansızlık, bilgilerin bir talepten diğerine saklanmadığı anlamına gelir.
Örneğin, biri isim diğeri şifre için olmak üzere 2 metin kutusu bulunan bir giriş sayfanız varsa. Bu sayfadaki Giriş düğmesine tıkladığınızda, uygulamanın kullanıcı adı ve şifrenin bir sonraki sayfaya iletilmesini sağlaması gerekir.
ASP.Net'te bu, çeşitli yollarla yapılır. İlk yol, ViewState adı verilen bir kavram aracılığıyladır. ASP.Net, tüm kontrollerin içeriğini otomatik olarak burada saklar. Ayrıca bunun bir sonraki sayfaya aktarılmasını da sağlar. Bu, ViewState adı verilen bir özellik aracılığıyla yapılır.
Bir geliştiricinin görünüm durumundaki herhangi bir şeyi değiştirmesi ideal değildir. Bunun nedeni yalnızca ASP.Net tarafından ele alınması gerektiğidir.
ASP.NET Oturum nesnesi
Diğer yol ise “Oturum Nesnesi” adı verilen bir nesneyi kullanmaktır. Session nesnesi uygulamanın yaşam döngüsü boyunca kullanılabilir. Session nesnesinde istediğiniz sayıda anahtar/değer çiftini saklayabilirsiniz. Yani herhangi bir sayfada, aşağıdaki kod satırı aracılığıyla Session nesnesine bir değer kaydedebilirsiniz.
Session["Key"] = value
Bu, değeri bir Oturum nesnesinde saklar ve 'anahtar' kısmı değere bir ad vermek için kullanılır. Bu, değerin daha sonraki bir zamanda alınmasını sağlar. Bir değeri almak için aşağıdaki ifadeyi kullanmanız yeterlidir.
Session["Key"]
ASP.NET Oturum nesnesi Örneği
Örneğimizde, sayfadaki ad metin kutusuna girilen adı saklamak için Session nesnesini kullanacağız. Daha sonra bu değeri alıp sayfada buna göre görüntüleyeceğiz. Aşağıdaki kodu Demo.aspx.cs dosyasına ekleyelim.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Açıklama:-
- Kodun ilk satırı, Name metin kutusu denetiminin değerini alır ve Session nesnesine kaydeder. Session["Name"] kodunu belirterek, özelliğe "Name" adında bir isim veriyoruz. Özelliğe bir isim vermek, daha sonraki bir zamanda onu almayı kolaylaştırır.
- Sonraki kod satırı, Session nesnesinden depolanan değeri alır. Daha sonra bu değeri 'Response.Write' yöntemi aracılığıyla istemciye geri yazar.
- Son olarak, formdaki tüm kontrolleri görünmez hale getiriyoruz. Bunu yapmazsak, tüm kontroller ve yanıt değerlerimiz birlikte görüntülenecektir.
Yukarıdaki değişiklikleri yaptıktan sonra aşağıdaki çıktıyı göreceksiniz.
Çıktı:
Çıktıdan, adın Oturum değerinin alındığını ve tarayıcıda görüntülendiğini görebilirsiniz.
ASP.NET Oturum Durumu Modları
ASP.NET, oturum verilerini oturum durumu modları adı verilen çeşitli yerlerde saklayabilir. Seçtiğiniz mod, performansı, ölçeklenebilirliği ve verilerin uygulama yeniden başlatıldığında korunup korunmayacağını etkiler. Aşağıdaki tabloda bunlar karşılaştırılmıştır:
| Moda | Durumun saklandığı yer | İçin en iyisi |
|---|---|---|
| InProc | Web sunucusunun belleğinde (varsayılan) | Tek sunuculu uygulamalar; en hızlısı, ancak yeniden başlatıldığında kayboluyor. |
| Devlet Sunucusu | Ayrı bir ASP.NET Durum Servisi işlemi | Web çiftlikleri; uygulama yeniden başlatmalarından etkilenmez. |
| SQL Server | Bir SQL Server veritabanı | Dayanıklı ve ölçeklenebilir duruma ihtiyaç duyan web çiftlikleri |
| görenek | Uyguladığınız özel bir sağlayıcı | Redis gibi uzmanlaşmış mağazalar |
| kapalı | Oturum durumu devre dışı bırakıldı | Oturum gerektirmeyen uygulamalar |
InProc varsayılan ve en hızlı yöntemdir, ancak yük dengelemeli dağıtımlar için StateServer veya SQLServer, oturumları birden fazla sunucuda kullanılabilir halde tutar.
ASP.NET'te Oturum Zaman Aşımı Nasıl Yapılandırılır?
Bir oturum sonsuza dek sürmez; belirli bir süre boyunca işlem yapılmadığında sona erer. Bu zaman aşımını web.config dosyasında sessionState öğesini kullanarak ayarlayabilirsiniz; zaman aşımı değeri dakika cinsindendir:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Bunu kodla da ayarlayabilirsiniz. Session.Timeout = 30;Varsayılan zaman aşımı süresi 20 dakikadır. Daha kısa bir zaman aşımı süresi seçmek, sunucu belleğini daha hızlı boşaltır ve güvenliği artırırken, daha uzun bir zaman aşımı süresi kullanıcıların daha uzun süre oturumda kalmasını sağlar.
Oturum Durumunun Avantajları ve Dezavantajları
Oturum durumu kullanışlıdır, ancak ona yoğun bir şekilde güvenmeden önce göz önünde bulundurmanız gereken dezavantajları da vardır.
Avantajları:
- Kullanıcı bazlı verileri (örneğin mağaza bilgilerini) saklamak için kullanımı kolaydır.ping Sepet veya giriş bilgileri.
- Sadece metin dizelerini değil, karmaşık nesneleri de saklayabilir.
- Veriler sunucuda saklandığı için istemci tarafındaki depolamaya göre daha güvenlidir.
Dezavantajları:
- InProc modu sunucu belleğini tüketir ve web sunucu çiftliğinde ölçeklenebilir değildir.
- Oturum süresi dolduğunda veya uygulama yeniden başlatıldığında (InProc modunda) oturum verileri kaybolur.
- Kullanıcı başına büyük miktarda veri depolamak, yoğun yük altında performansı olumsuz etkileyebilir.



