Sunucu (Server) Tabanlı Durum Kontrolleri

Eyl 06, 2013
  • Session State (Oturum Durumu)

    Herhangi türden bir verinin sunucudaki bellek üzerinde saklanmasını sağlayan bir durum kontrolüdür. İstemci (client), bir Web sunucusuyla bağlantı kurarak ASP.NET sayfası talep ettiğinde sunucu tarafından istemciye 120 bit boyutunda ASCII karakterlerinden oluşan bir "SessionId" atanır. Bu kelime bir şifreleme algoritması tarafından ve her istemci için tek (unique) olarak üretilir. SessionId, Web sayfasına talep göndererek sunucuyla iletişim kuran kullanıcıları birbirinden ayırt etmek amacıyla kullanılır ve istemcideki Web tarayıcısı kapatılıncaya kadar sunucuda tutulmaya devam eder. 

    Session State, "System.Web.SessionState.HttpSessionState" sınıfına erişilerek kullanılabilir. Sunucu tarafından istemci bilgisayara gönderilip burada da saklanan SessionId bilgisi, Session nesnesinin SessionId özelliği çagrılarak ögrenilebilir.

    private void Page_Load(object sender, EventArgs e) 

       Response.Write(Session.SessionID); 


    Session değişkene değerinin yazılması:

    private void Page_Load(object sender, EventArgs e)
    {
        Response.Write(Session.SessionID);
        Session.Timeout = 1;
        if (Session["sayi"] == null)
            Session["sayi"] = 0;


    Session değişkene atanan değerin okunması:

    private void Button1_Click(object sender, EventArgs e)
    {
        Session["sayi"] = (int)Session["sayi"] + 1;
        Label1.Text = Session["sayi"].ToString();


    Kullanıcının her talebinde doğru oturum değerleriyle sayfaya erişebilmesi için iki farklı yöntem geliştirilmiştir.

    • Cookie kullanarak: Her Session kullanımında SessionId değeri özel ve otomatik olarak yaratılmış bi cookie'ye iletilir
    • Özel URL kullanarak: Cookie'lere izin vermeyen kullanıcılar için geliştirilmiş bu yöntemde SessionId özel olarak yaratılmış URL'ler kullanılarak iletilir.


      "HttpSessionState" sınıfına ait bazı metodlar:

      Session.Timeout: Session değişkenlerin sunucuda tutulma sürelerini değiştirmek için kullanılır. Varsayılan süre yirmi dakikadır.
      Session.Clear(): Session değişkenleri silmek için kullanılan metoddur. Kullanıldığı zaman Session["sayi"] değeri "null"  olur fakat "SessionId" silinmez.
      Session.Count: Kullanılan Session'daki item (öğe) sayısını bildirir.
      Session.Abandon(): Kullanılan Session'ı iptal eder ve hafızada kapladığı alanı boşaltır. Session kullanıcıya özgü bilgileri sakladığından, kullanıcı uygulamadan çıktığında bellekten atılmalarında bir sakınca yoktur. Örneğin; bir alışveriş sepeti içindeki ürünler Session ile tutulur ve sipariş tamamlanmazsa veya tarayıcı kapatılırsa bu bilgiler sıfırlanır.
    • "Web.config" dosyasında Session ile ilgili kısım:

      <sessionState
        mode="Inproc"
        stateConnectionString="tcpip=127.0.0.1:42424"
        sqlConnectionString="data source=127.0.0.1; Trusted_Connection=yes"
        cookieless="false"
        timeout="20"/>
    • Mode özelliği; Session değerlerinin saklanacağı yeri belirler ve bu işlem üç farklı şekilde yapılabilir.
      • Inproc: Session değeri, çalıştığı süre boyunca IIS işleminin içinde saklanır.
      • StateServer: Session değeri, sunucuda arka planda çalışan ASP.NET durum servisinde saklanır.
      • SQLServer: Session değeri, SQL sunucusunda bulunan tablolarda saklanır. Bu şekilde uygulamada kalıcılık sağlanır.
        Cookieless özelliği; Session değişkenin istemcide çerez içerisinde saklanabilme durumunu belirler. Varsayılan değeri "false"dur. "True" yapıldığında "SessionId" URL'ye eklenerek istemciye gönderilir.
        Timeout özelliği; Session değişkenin dakika cinsinden ömrünü belirler.

        Session State'in dezavantajı ise; belleğin tükenmesine sebep olacağı için "dataset" gibi büyük verileri saklamaya elverişli olmamasıdır.
  • Application State (Uygulama Durumu)

    Tüm uygulamayı kapsayan ve her kullanıcı tarafından erişilebilen global nesnelerin tekrar kullanılmak üzere saklanmasını sağlayan durum kontrolüdür. Application nesnesi uygulamaya özgüdür ve tarayıcı kapatıldığında dahi bellekte tutulmaya devam eder. IIS çalıştığı sürece kullanılabilir. Application State, "System.Web.HttpApplicationState" sınıfından türemiştir ve Session State ile büyük ölçüde benzerlik gösterir. Aynı nesnelere sahiptir, aynı syntax'ı kullanır ve aynı şekilde bilgiyi sunucudan alır. Bu kontrol ile yapılan en genel uygulama kaç adet Session oluşturulduğu veya sayfanın kaç kez görüntülendiği bilgilerini tutan sayaç uygulamasıdır.

    Application değerinin yazılması ve okunması:

    private void Page_Load(object sender, EventArgs e)
    {
        if (Application["ziyaret"] == null)
            Application["ziyaret"] = 0;
        Application.Lock();
        Application["ziyaret"] = (int)Application["ziyaret"] + 1;
        Application.UnLock();
        Label1.Text = "Ziyaret Sayısı:" + Application["ziyaret"].ToString();
    }


    Lock() metodu: Birden fazla kullanıcı tarafından değer atanabilen Application nesnesine atama işleminin sırayla yapılması gerekir. Aynı anda iki kullanıcı değişkenin değerini değiştirmeye çalışırsa bir hata ile karşılaşılır. Böyle bir durumu engellemek için bu metod kullanılarak kullanıcılardan yalnızca birinin değişiklik yapmasına izin verilir. ilk kullanıcının işlemi bittiğinde diğerlerine teker teker izin verilir.
    Unlock() metodu: Bu metod ile Application nesnesinin başka taleplere karşılık verebilmesini sağlamak için üzerindeki engeleme kaldırılır.

    Bir çok çeşit veri tipi Application nesnesi ile saklanabilir ve bellek performansı bu durumdan etkilenmez.

  • Database (Veri Tabanı)

    Çok kullanıcılı Web uygulamalarında kullanıcı bilgilerini ve tercihlerini depolamak için kullanılır. Bunun yanısıra, uygulamanın kendisi de veritabanında depolanmış bilgilere ihtiyaç duyabilir. Bir haber sitesinin haber arşivini saklayan veritabanı buna örnek olarak verilebilir. Veritabanı kullanmak, verileri dosyalar halinde saklamaktan çok daha güvenlidir. Ancak performans kaybı yaşamamak açısından veritabanının tasarımını iyi bir şeklide yapmak önemlidir.