Merhaba arkadaşlar, bu yazımda web yazılımcılığında kullanılan Session nesnesinin ne olduğunu, ne işe yaradığını ve nasıl kullanıldığını işlemeye çalışacağım.
Session Nedir?
Internet kültüründe var olan belki de en karakteristik ve bilinmesi gereken bir özelliktir. Türkçe karşılığı "Oturum" anlamına gelmektedir.
Session, tarayıcınız herhangi bir web sitesinde gezinirken size verilen oturum demektir.
Herhangi bir istemci, herhangi bir web sitesine girdiği zaman, istemci istese de istemesede otomatik olarak sitenin barındırıldığı sunucu tarafından o istemciye ilgili site için oturum açılmış olacaktır. Hatta bu açılan oturumu istemci bazında kişiselleştirmek için istemciye açılan oturumun "SessionID" özelliğine tekil (unique) bir değer atanacaktır.
Önemli : Sunucu bu değeri verirken asla daha önceden kullanılmış bir SessionID değerini atamaz, her oturum için ayrı değer üretilir.
İstemcinin siteye girdiğinde oluşturulduğu Session nesnesi, sayfalar değiştiğinde kaybolmaz. Zaten amacıda bu'dur. Yani dafault.aspx'de ulaşabildiğiniz SessionID değerine, iletisim.aspx sayfasında da ulaşabiliyorum. Aslında buradan varacağım konu Session nesnesine bizim de değerler atayabilmemizdir. Dolayısıyla kullanıcılarınız sayfalar arası gezinirken taşıması gereken bilgileri Session nesnesinde taşıtabiliyoruz.
C#'ta Session sınıfını kullanabilmeniz için sayfanızda System.Web kütüphanesinin kullanılıyor olması gerekmektedir.
Hemen bir örnek ile konuyu inceleyelim. Mesela şöyle yapalım Default.aspx sayfamızda "TC-KimlikNo" adlı bir Session değişkenine "17804612758" değerini atayalım ve buna iletisim.aspx sayfasında ekrana yazdıralım.
Default.aspx.cs :
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session.Add("TC-KimlikNo", "17804612758");
}
}
Iletisim.aspx.cs
public partial class Iletisim : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Default.aspx'de TC-KimlikNo adl Session değişkenine
// atadığımız 17804612758 değerini burada yani iletisim.aspx
// sayfasında önce string bir değişkene aktarıyoruz sonrada
// ekrana yazdırıyoruz.
string Sessiondan_Gelen_Deger = Session["TC-KimlikNo"].ToString();
Response.Write(Sessiondan_Gelen_Deger);
}
}
Üstteki örnekte dikkat etmemiz gereken konular şunlardır.
1. Yeni bir Session değişkeni tanımlama
C# içerisinde yer alan Session sınıfına ait bazı metotlar vardır. Bunlardan bir tanesi de Session değişkeni ve değeri eklememize yarayan metotdur.
Session.Add("Degisken-Adi", "Degeri");
Üstteki resimde de gördüğümüz gibi ilk parametrede bizden string türünden bir isim vermemizi istiyor, ikinci parametrede ise object türünden yani bu c# içerisindeki herşey olabilir (string, int, class v.b) herhangi bir değer vermemizi bekliyor.
2. Session değişkenine nasıl erişileceği
Session nesnesine bir değişken ve değer eklediğimiz zaman ona erişmek çok basittir. Aşağıdaki örnekte görebilirsiniz.
Session["TC-KimlikNo"]
Yukarıda da gördüğünüz gibi session değişkenine verdiğiniz isimle bu şekilde erişebiliyoruz.
Fakat burada dikkat edilmesi gereken bir konu var. Session nesnesine vereceğiniz değer object türünden olduğu için bu nesneyi çağırdığınız yerde, nesnenin değerinin türü neyse o tür ile cast etmeniz gerekmektedir.
Mesela ;
//String tipinden değer verdiğiniz zaman
Session.Add("KullaniciAd", "Douhan");
string strDeger = Session["KullaniciAd"].ToString();
//Int tipinden değer verdiğiniz zaman
Session.Add("SayisalDeger", 25);
int intDeger = (int)Session["SayisalDeger"];
//DateTime tipinden değer verdiğiniz zaman
Session.Add("Suanki-Tarih-ve-Saat", DateTime.Now);
DateTime dSuan = (DateTime)Session["Suanki-Tarih-ve-Saat"];
...
...
3. İşlem sırası önceliği
Hatırlarsanız en üstte verdiğimiz örnekte default.aspx'de oluşturduğumuz session değişkenini iletisim.aspx'de çağırıp ekrana yazdırmıştık.
Burada sakıncalı olan bir konu var o da şudur.
Eğer Default.aspx sayfasına girmeden direk iletisim.aspx'i çağırırsanız Session["TC-KimlikNo"] değişkeni oluşmadığı için hata alacaksınız. Böyle durumlarda sıkıntıya düşmemek için eğer başka sayfada oluşturulmuş bir session değişkenini kullanacaksanız aşağıdaki gibi bir kontrolden sonra session değişkenine erişmelisiniz..
if (Session["TC-KimlikNo"] != null)
{
string Sessiondan_Gelen_Deger = Session["TC-KimlikNo"].ToString();
Response.Write(Sessiondan_Gelen_Deger);
}
Evet yukarıda Session nasıl oluşturulur ve oluşturulan Session değişkeninin içindeki değer nasıl çekilir onu öğrendik. Şimdi gelelim asıl mevzuya biz bu Session denen şeyi benim tabirimle "Hayalet Veri"leri neden her sayfada kullanma gereği duyalım. Gelin ona bakalım yine bir örnekle...
Session Ne için Kullanılabilir?