Web Uygulamalarında Olay Seviyeleri
(Web Application Event Levels)
Web uygulamalarında olaylar(Event) 3 seviyede meydana gelir.
1-Application Level (Uygulama
Seviyesi)
Örnek:
Application Start, Session Start
2-Page Level (Sayfa Seviyesi)
Örnek:
Page Load
3-Control Level (Kontrol
Seviyesi)
Örnek: Button Click
ViewState değişkenleri aynı sayfa içindeki durum bilgilerini
korumak için kullanılır.
Bir forma ait bir ViewState nesnesi başka bir form için
geçerli değildir. Yani sayfalar arası bilgi taşımada kullanılmaz.
Peki, formlar arası bilgi taşımak
istenirse ne olacak?
Bir formdan başka bir forma veri aktarımında kullanılan
teknikler şunlardır:
1-SessionState
2-ApplicationState
3-QueryStrings
4-Cookies
SessionState
SessionState değişkenleri tüm sayfalardan geçerlidir. Yani
tüm sayfalar arasında veri taşımada kullanılabilir. FAKAT SADECE BELLİ BİR OTURUM(SESSION)
İÇİN.
Oturum(Session) değişkenleri tek bir kullanıcının global
verileri gibi düşünülebilir. Sadece o anki oturum kendi oturum değişkenlerine
erişebilir. Diğer oturumlar başka bir oturumun değişkenlerine erişemezler.
ApplicationState
Bu değişkenler tüm sayfalar ve tüm oturumlar için
geçerlidir. Yani tüm sayfalar ve tüm oturumlar tarafından kullanılabilirler.
Uygulama(Application) değişkenleri tüm kullanıcıların global
verileri gibi düşünülebilir. Tüm oturumlar ApplicationState değişkenlerini
okuyup yazabilirler.
ASP.Net web uygulamalarında uygulama seviyesi olayları(Application
Level Events) Global.asax dosyasında bulunur. Bu dosyadaki bazı metotlar
şunlardır:
Application_End: Eğer uygulama üzerinde çalışan son oturum
sonlandı ise bu olay tetiklenir.
Application_Error: Eğer uygulamada ele alınmamış(unhandled)
bir exception oluşursa bu olay tetiklenir.
Session_Start: Yeni bir kullanıcı oturumu başlatıldığında
çalışır.
Session_End: Mevcut bir kullanıcı oturumu zaman aşımına
(time out) uğradığında çalışır.
*Session Timeout değeri web.config dosyasında bir attribute
ile set edilebilir.
*Application Olayları application seviyesindeki verileri/değişkenleri
başlatmak için kullanılır. Yani tüm mevcut oturumlar için geçerli olacak
değişkenleri…
*Session Olayları sadece belli bir kullanıcıya ait verileri
başlatmak içindir. Bu veriler oturumlar arasında paylaşılamaz.
Örnek Uygulama:
Basit bir uygulama ile görelim. Yeni bir ASP.NET Web Forms
Application oluşturun. AnaSayfa.aspx dosyasını ekleyin. Global.asax dosyasını
düzenleyelim.
Daha sonra AnaSayfa.aspx in code behind dosyasını düzenleyelim.
AnaSayfa.aspx i çalıştırdığımızda o anki Application sayısını ve kullanıcı oturum
sayısını görebiliriz. Normal şartlarda her kullanıcı oturumu bir kullanıcıya
karşılık gelmektedir.
Farklı tarayıcılarda
çalıştırdığımızda her biri için ayrı oturum açılmaktadır.
(Oturumlar(Session) varsayılan olarak Cookie(Çerez)
kullanırlar. Bir tarayıcı web server a eriştiğinde bir Session ID alır. Session
ID istemci bilgisayarında Cookie’de tutulur. Buna Session Cookie de denir. Aynı
tarayıcının farklı pencere ve sekmeleri bu Session Cookie yi paylaşabilir.
Fakat farklı tarayıcılar paylaşamaz. Bu yüzden farklı bir tarayıcı ile sayfaya
erişildiğinde tarayıcı yeni bir Session ID alır ve bu yeni bir Cookie de
saklanır. Yani sanki yeni bir kullanıcı web server ulaşmış gibi algılanır.)
Internet Explorer
* Normalde bir kullanıcı bir web sitesini bir oturum ile
ziyaret eder. FAKAT bir kullanıcı bir web uygulamasını farklı Session ID lerine
sahip tarayıcılarla ziyaret ettiğinde birden fazla oturuma sahip olabilir.
Yeni bir Session ID almanın ve Session_Start() olayını
tetiklemenin yolları:
1-Web sitesine bağlı olan çalışan tarayıcı penceresini
kapatmak ve yeni pencere açmak.
2-Session zaman aşımına düşünce(Session Time Out)
Web.config dosyası
düzenlenerek varsayılan timeout değeri olan 20 değiştirilebilir.
<sessionState mode="InProc" timeout="1"></sessionState>
3-Farklı bir tarayıcı penceresi ile web sitesine bağlanmak
4-Çerezsiz Oturumlar (Cookie-less Sessions) kullanmak
Web.config dosyasını
düzenleyerek çerez kullanımı engellenebilir.
<sessionState mode="InProc" cookieless="true"></sessionState>
Bu şekilde uygulama çalıştırılsa URL ye unique alfanümerik
bir alan eklenir. Bu Session ID değeridir. Session ID artık URL e gömülmüştür.
Yeni bir sekmede uygulamaya URL de aynı Session ID olduğunda
tekrar erişin.
Bir de yalın URL ile erişin.
Bu şekilde web sunucusu size yeni bir Session ID
atayacaktır.
ViewState, Session State, Application State
ViewState
1-Bir formun ViewState değişkeni sadece o form için
geçerlidir
2-ViewState değişkeni geçerli sayfada _ViewState adında bir
gizli alan(hidden field) olarak
tutulur. Bundan dolayı başka bir sayfaya geçiş yapıldığında ya da tarayıcı
kapatıldığında bu değişken kaybolur.
3-ViewState değişkenleri tüm asp.net kontrolleri tarafından
Postback istekleri arasında otomatik olarak kullanılır.
Örnek Uygulama:
Boş bir web uygulaması içine ViewState1 ve ViewState2
isminde 2 form ekleyin. Formlara bir textbox ve bir button ekleyin.
Code behind dosyasını da düzenleyin.
Çalıştırıp inceleyin.
|
Adım 1 |
Adım 2 |
|
|
|
|
Adım 3 |
Adım 4 |
|
|
|
Session State
1-Session state değişkenleri belirli bir kullanıcı için tüm
sayfalarda geçerlidir. Belirli bir kullanıcının global verileri gibi
düşünülebilir.
2-Session state değişkenleri web server da tutulur.
3-Session state değişkeni, kullanıcı oturumu zaman aşımına
uğradığında silinir. Varsayılan zaman aşımı değeri 20 dakikadır. Fakat bu değer
web.config den değiştirilebilir.
Örnek Uygulama:
Önceki uygulamaya SessionState1 ve SessionState2 isminde 2
form ekleyip benzer tasarımı uygulayalım.
Code behind dosyalarını da düzenleyelim. Bir önceki kodda
ViewState olan yerler Session olarak değiştirilecek.
Çalıştırıp inceleyin
|
Adım 1 - Firefox |
Adım 2 - Firefox |
|
|
|
|
Adım 3 - Firefox |
Adım 4 - Firefox |
|
|
|
|
Adım 5 – Microsoft
Edge |
Adım 6 –
Internet Explorer |
|
|
|
|
|
|
·
Farklı tarayıcılar farklı kullanıcılar gibi
algılanmaktadır.
Application State
1-Application state değişkenleri tüm kullanıcılarda ve tüm
sayfalarda geçerlidir. Tüm kullanıcıların global data sı gibi düşünülebilir.
2-Application state değişkenleri web server da tutulur.
3-Application state değişkenleri uygulama yeniden
başlatıldığında sıfırlanır.
Örnek Uygulama:
Aynı dizaynda ApplicatonState1 ve ApplicatonState2 isminde 2
form oluşturup code behind dosyalarını düzenleyin.
Çalıştırıp inceleyin.
|
Adım 1 - Firefox |
Adım 2 – Firefox |
|
|
|
|
Adım 3 – Microsoft Edge |
Adım 4 – Microsoft Edge |
|
|
|
|
Adım 5 - IE |
Adım 6 - IE |
|
|
|
·
Farklı tarayıcılar farklı kullanıcılar gibi
algılanır demiştik. Farklı kullanıcılar uygulamaya bağlanmasına rağmen tıklanma
sayısı kaldığı yerden devam etmektedir.
Şunlara dikkat:
Bir uygulama birden fazla oturum içerir.
Bir oturum birden fazla form sayfası içerir.
|
Form1.aspx ViewState |
|
Form2.aspx |
|
Form3.aspx |
|
Form1.aspx |
|
Form1.aspx |
|
Form4.aspx |
|
Form3.aspx |
|
Form2.aspx |
|
Form3.aspx |
|
Form2.aspx |
|
Form4.aspx |
|
Oturum 2 |
|
Oturum 3 |
|
Oturum 1 Session |
|
Form4.aspx |
|
Uygulama Application |