eceyucel307
  Asp.net Uygulamarında Session Yönetimi
 
Asp.net Uygulamarında Session Yönetimi

Web uygulamalarında kullandığımız Session, kullanıcının pek çok bilgisini sayfalar boyunca taşıdığımız basit veri anbarlarımızdır. Session kullanımı sayfalar arası bilgi aktarımda pratik bir çözüm olmakla birlikte düzensiz kullanıldığında pek çok probleme de sebep olabilir. Sayfalar arası taşıdığımız bilgi arttıkça, session kontrolu gerekmektedir. Session’da bulunan nesneler server belleğinde yer işgal etmektedir. Bu yüzden gereksiz bilgi mümkün olduğunca bulundurulmamalıdır. Ancak database connection kurularak alınan ve uygulama sırasında tekrar kullanılma ihtimali olan bilgiler Sessionda bulunmalıdır.

Aynı sayfanın, sayfa üzerinde bir veya birkaç değerin değiştirilerek tekrar tekrar çağrıldığını düşünelim. Ve burada bazı bilgileri (mesela tekrar sayıları..) session’da saklıyor olalım. Farklı sayfaya gidildiği zaman buradaki bilgi anlamsızlaşacaktır. Session’da durması gereksizdir, silinmelidir. Silinmediği durumda farklı bir sayfada yanlışlıkla okuyabilirsiniz..

Mesela aynı isimli bir kaç nesne olmamalıdır. Bu yüzden isimlendirme önemlidir. Session nesneleri yanlışlıkla birbirini ezebilir. Uygulama geliştirirken kullanıcının sadece linkleri ve kullanacağını varsaymak ta yanlıştır. Browser adresine istediği dosyaya yazarak o sayfaya ulaşabilir. Böyle durumlar için de çözümler üretilmiş olmalıdır.



Bir sınıf yazsak ve bu sınıf tüm session’ı kontrol etse daha iyi olmaz mı? İsterseniz böyle bir sınıf yazmayı deneyelim.

3 tür session bilgisi olduğunu varsayalım:

1 - Sadece belirli bir sayfada bulunan bilgiler(nesneler)

2- Tüm uygulamada geçerli olan bilgiler (kullanıcı id,..)

3- Sadece belirli bir sayfadan diğer belirli bir sayfa bilgi aktarımında kullanılanlar.

Yazacağımız bu sınıf her sayfa çağrıldığında çalışması gerekir. Bu yüzden genel ve sayfaya özel Session nesnelerini başta ve o işlem daha olmadan  belirlememiz gerek ki kontrol edelim. Bunun için sınıf içerisinde 2 liste  tutalım. Biri ozelliste diğeri genelliste olsun. Aynı sayfadan çağrılan ve  o sayfadan ayrıldıktan sonra bir anlam taşımayacak nesneleri ise tanımlamamıza gerek yok. Ancak onları sayfdan ayrıldıktan sonra silmek gerekir.

Oluşturduğumuz nesnemiz önceki sayfayı ve istekte bulunulan sayfayı okuyarak durumu tespit edip işlem yapmalıdır. Ayrıca kendini de Session’a da yazmalıdır ki kendi varlığını sürdürsün.

Constructor’a baktığımız zaman:



Listelerimiz de olmalı



Uygulama boyunca geçerli olacak nesnelerimizi listemize eklemek için metodumuz olmalı:



Burada dikkat ederseniz “OK” ismi ile bizim nesnemiz Session’da durduğu için bu session Id’yi kabul etmemelidir.

Özel bilgiler listemizi eklemek biraz daha farklıdır. Genelde ismin olması yeterliyken burada istekte bulunan ve istekte bulunulan(çağrılan) sayfa bilgileri gerekmektedir. Unutmayalım ki bu listedeki session bilgileri yanlızca tanımlanan sayfalar olduğu zaman kullanılacak, diğer durumlarda silinecektir.

Listemize özel durum bilgilerini tutmak için bir sınıf oluşturalım ve listede bu şekilde tutalım.



Şimdi de ozel listemize bu bilgileri ekleme metodumuzu yazalım.



Aynı sayfa çağrılıyorsa (bulunulan ve çağrılan) session kontrolunun yapılmasına
gerek yoktur. Bazı tekrarlar tutuluyor olabilir. Zaten bu durumda yapılacak session kontrolu esnekliğimizi azaltır.



Eğer uygulamanın ilk sayfası ise req.UrlReferrer (bir önceki sayfa) null’dur, kontrol etmek gerekir. Önceki sayfa ile sonraki sayfa aynı ise true döner.

Şimdi özel durum olma durumlarını kontrol eden metodu yazalım :



Eğer sessionda bulunan bir nesnenin özel listede adı geçiyorsa buradaki önceki
ve sonraki sayfa bilgilerine bakılır. Eğer tanımlı durum gerçekleşmişse true döner.

Şimdi sıra geldi tüm yönetim işini yapacağımız metodu yazmaya. Bu metod her sayfa çağrıldığı zaman çalışacak ve gereksiz session nesnelerini silmelidir.



Bulunulan ve istekte bulunulan sayfalar farklı ise tüm kontroller sırasıyla yapılır. Sessionda bulunan tüm nesnelere bakılır. genelListede bulunan bir nesneye tlandığında silinmez. Yine özel durum sözkonusu ise nesne silinmezken diğer tüm durumlarda silinirler.

Her sayfa çağrıldığınca sessiondan nesne alma işlemleri aynı olacaktır. Bunun için bir statik metod tanımlasak ve Sesiondan okuma işlemlerini burada yapsak nasıl olur ?



Session yönetimi için gerekli sınıfımız yazdıktan sonra sıra geldi bu sınıfın nesnesini web uygulamamızda kullanmaya.

Öncelikle her session başladığı zaman bu nesneden oluşturmalı ve tüm session boyunca korumalıyız.



Kontrolü yapabilmemiz için her sayfa çağrıldığı zaman bu sınıftan session’ı kontrol etmesini istemeliyiz.



Tüm uygulamada geçerli bir session nesnesi tanımladığımız zaman şu şekilde yapmamız gerekir :



Özel durumlar tanımlamamızı ise şöyle yapmalıyız :


 
 
  Bugün 14361 ziyaretçi (22497 klik) kişi burdaydı!  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol