durum yönetimi (state management)

Transkript

durum yönetimi (state management)
DURUM YÖNETİMİ
(STATE MANAGEMENT)
Öğr. Gör. Emine TUNÇEL
Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu
Durum Yönetimi
• Geleneksel bir HTML sayfasında oluşturulan form
elemanlarında, örneğin bir TextBox doldurup, Gönder
butonuna tıklandığında, o TextBox kontrolünün içi
boşaltılır.(sayfa gönderilmeden önceki veriler muhafaza
edilmiyor)
• Ancak belki biz o doldurduğumuz veri ile ilgili işlem yapmaya
devam edecektik ve tekrar doldurmak zorundayız.
• Oysa ASP.NET ile bunun gibi bir durum söz konusu değildir.
• ASP.NET çeşitli teknikler sunarak, kullanıcının girmiş olduğu
verilerin sayfa postback olduğunda korunmasını sağlar.
• Buna sayfadaki mevcut durumu koruma (Maintain State)
denir.
Mevcut Durumu Koruma
Örnek sayfada textbox’a gireceğimiz isim hem label kontrolünde
hem de response.write tarafından gösterilecek. Şimdi ismimizi
girip Gönder butonuna tıklayalım:
Mevcut Durumu Koruma
•
•
•
•
•
•
•
Burada dikkat etmemiz gereken ilk nokta Gönder butonuna basıp sayfayı
gönderdiğimiz halde girilen isim verisi halen TextBox da duruyor
Kodlarımızda Textbox nesnesinin onTextChanged olayını yani metnin
değişmesi durumunu ifade eden bildirimi kullandık
Dolayısıyla isim girdisi değişmeden gönder butonuna basıldığında sunucu
herhangi bir olay gerçekleşmediğini görüp olay yordamını çalıştırmaz.
Son girilen ismi hiç değiştirmeden gönder butonuna tıkladığınızda sadece Label
kontrolündeki mesaj görünecektir.
Olay yordamı işletilmiyor. Çünkü eğer işletilmiş olsa response.write dan gelen
mesaj da gözükmeliydi.
Ancak sayfadaki Textbox ve Label girdisi korunmuş. İşte mevcut durumu
koruma tam anlamıyla budur..
Sunucu postalama anındaki verileri korumuş ve geri postalama da (Post Back)
hepsini yerli yerine koymuş
Mevcut Durumu Koruma
• Bu durum, web programlama da geliştiricinin ekstra kod
yazmadan, kullanıcının girdiği verileri koruması anlamında bir
ilk olup, programcı ve kullanıcıya büyük kolaylık
sağlamaktadır.
• Yukarıdaki örneğimizde TextBox kontrolüne girilen isimde bir
değişiklik yapıp tekrar gönder butonuna tıklayalım
• Bu defa hem label kontrolünden hem de response.write dan
gelen mesaj görüntülenecektir.
• Yani sunucu olayın gerçekleştiğini algılamış ve yordamı
çalıştırmıştır.
• Peki sunucu bu
algılamaktadır?
değişimi
veya
değişmezliği
nasıl
VIEWSTATE
• Sayfa ilk defa talep edildiğinde oluşturulan ve sayfanın kaynak
kodlarına eklenen; sayfa ve web kontrollerine ait bütün
değerleri tek bir string olarak toplayıp, kodlayarak içerisinde
barındıran gizli bir form elemanıdır.
• ViewState yalnızca sunucu taraflı formlarda oluşturulur. Diğer
bir ifade ile form tanımlamanız <form runat=server> şeklinde
olmalıdır.
• ViewState değerleri, ziyaretçinin bilgisayarında saklanır ve
sunucuda hiçbir yer kaplamazlar.
VIEWSTATE’İN YÖNETİMİ
•
ViewState yönetilebilir bir özelliktir.
•
Diğer bir ifadeyle ViewState değerine sayfa ve kontrol verilerinin eklenip
eklenmeyeceğine müdahale edebilirsiniz.
•
Bunu 3 şekilde yapabiliriz:
1.
Uygulama Kapsamında:
Bunun için web.config dosyasında
Şeklinde bir ifadeye yer vermeliyiz. Böylece web uygulamamızdaki bütün sayfalarda
ViewState e durum bilgisi değerleri eklenmesi engellenir.
2.
Sayfa Kapsamında
Sayfa başlık bildirimine koyacağımız
şeklindeki bir ifadeyle, sadece o sayfa ve bütün kontrolleri için durum bilgisi
değerleri ViewState e eklenmez.
3.
Kontrol Kapsamında
<asp:kontrol_ismi EnableViewState="false".../> şeklinde bir ifade ile sadece
belirttiğimiz kontrolün durum bilgisinin ViewState değerine eklenmesini engelleriz
VIEWSTATE’I KULLANMAMAK
• ViewState ’i (durum bilgisini) neden kullanmak istemeyebiliriz?
• Bunun 3 temel nedeni olabilir:
 Sayfa kendisine geri dönüşüm yapmayacak (PostBack)
olabilir. Bu durumda kontrol elemanlarında herhangi bir
kıyaslama gereği de yoktur. Dolayısıyla ViewState
kullanmak gereksizdir.
 Kontrol elemanlarında herhangi bir olay yakalama söz
konusu değilse, durum bilgisini tutmanın bir anlamı yoktur.
 Kontrol elemanı dinamik veri girilebilir özellikte değilse
veya bir veri kaynağına bağlıysa durum bilgini tutmanın bir
anlamı yoktur.
• Gerekmediği
durumlarda
durum
bilginin
tutulması
engellenmeli, sayfa boyutu gereksiz yere arttırılmamalıdır
STATEBAG
• Bazı durumlarda programcı, sayfadaki herhangi bir durumu
muhafaza etmek ve saklamak amacıyla ViewState
mekanizmasını kendi girdileri için kullanabilir.
• Bu durumda StateBag denilen ve form postalandığı zamanki
değerleri tutan bir nesne kullanılır.
• Kullanıcının girmediği, düzenlenmiş bilgileri saklamak için
kullanılan bir nesnedir.
• İşleyişi aynen ViewState sisteminde olduğu gibidir.
• Yani bunlarda sayfadaki mevcut ViewState gizli form elemanına
diğer kontrollerden gelen veriler gibi kodlanmış veriler ekler.
• Bu değişkenlere ViewState Değişkenleri denir ve yazımı
aşağıdaki gibidir:
• ViewState ["degisken_ismi"] = değer
STATEBAG
• Sayfamıza bir label kontrolü ve bir buton ekleyerek Sayfanın
yüklenmesi olayı ile butonun tıklanması olayında aşağıda
verilen metotların çalıştırılmasını sağlayalım :
STATEBAG
• Bu örnekte sayfanın ilk defa yüklenip yüklenmediği kontrol
ediliyor (Page.IsPostBack ile).
• Eğer ilk defa yükleniyorsa saat isimli ViewState değişkenine o
anki zaman değeri atanıyor.
• Gönder butonuna tıkladığımız zaman, sayfa PostBack
yapacak ve bu sefer koşul doğrulanmayacak ve dolayısıyla
saat ViewState’ine herhangi bir değer atanmayacaktır.
• Ancak bu ViewState değişkeni halihazırda sayfa yüklendiği
zamanki değeri tutmaktadır.
Durum Yönetimi
• ASP.NET ile hem istemci hem de sunucu taraflı durum
yönetimini başarılı bir şekilde yapabiliriz.
• Durum yönetimi araçları aşağıdaki gibi sıralanabilir:
• İstemci Taraflı:
 ViewState
 QueryString
 Cookie
• Sunucu Taraflı
 SessionState
 ApplicationState
QUERYSTRING
• QueryString sayfalar arası değer ya da değerleri taşıma işlemini
gerçekleştirir.
• Bu değerler URL üzerinden taşınmaktadır.
• Diğer bir ifadeyle Browser'dan sunucuya veri aktarır.
• QueryString ’ler
ayrılırlar.
? ile başlar ve birbirlerinden & işareti ile
• http://deneme.com/ogrenci.aspx?isim=Emine&soyisim=Tuncel
• QueryString ile bir ya da yukarıdaki örnekte de olduğu gibi
birden fazla verinin taşınması sağlanabilir.
• Taşınacak veriler elle girilebileceği gibi veritabanı gibi başka bir
kaynaktan da alınabilir.
ASP.NET ile QueryString Oluşturulması
Veri Gönderimi
• QueryString oluştururken Response nesnesi kullanılır.
• Response nesnesi bir formdan veya bir sayfadan başka
bir sayfaya veri aktarımında oldukça kullanışlıdır.
• Özellikle Redirect metodu ile kullanılır.
• Redirect, farklı bir sayfaya yönlendirme yapmak
amacıyla
kullanılan
Response
nesnesinin
bir
metodudur.
• Response.Redirect("default.aspx")
• Aktarmak istenen veri özel bir bildirimle yazılır.
ASP.NET ile QueryString Oluşturulması
Veri Gönderimi
• İki sayfamız olsun. Birisi default.aspx , diğeri veriyi
göndereceğimiz ogrenci.aspx sayfası
• Veri göndermenin 2 yöntemi vardır:
- Veriyi direkt olarak göndermek;
Anasayfada (Default.aspx) bir butona tıklandığında isim:Emine,
soyisim:Tuncel verilerini ogrenci.aspx sayfasına gönderelim
ASP.NET ile QueryString Oluşturulması
Veri Gönderimi
- Veriyi kontrolden alarak göndermek;
Ana sayfa da (Default.aspx) bir butona tıklandığında TextBox1
ve TextBox2 kontrollerinde bulunan değerlerin ogrenci.aspx
sayfasına taşınmasını sağlayalım
ASP.NET ile Gelen QueryString’in İstenmesi
Veri Alımı
• Querystring’in
istenmesi
Request.QueryString()’dir
için
kullanılan
metot
• Bir önceki örneğimizden ana sayfadan butona tıklandığında
isim ve soy isim değişkenlerine ait değerleri ögrenci.aspx
sayfasına aktardık.
• Şimdi ogrenci.aspx sayfasından bu verileri elde edelim:
• Bir butonumuz olsun ve butona
değişkeninin değerini göstersin
tıklandığında
isim
ASP.NET ile Cross-Page Posting
(Başka Sayfa Kontrollerini Elde Etme)
• Bir önceki sayfadan istenilen değerlere ulaşmak için Cross
Posting kullanılır.
• Böylelikle sayfalar arası devamlılık ve durum yönetimi
sağlanmış olur.
• CrossPagePosting.aspx sayfamızı oluşturalım:
• Bu sayfada bir Label, Textbox ve Buton kontrolü bulunmaktadır.
• Buton
kontrolünün
PostBackUrl
özelliği
CrossPageCevap.aspx sayfasına yönlendirme yapıyoruz
ile
ASP.NET ile Cross-Page Posting
(Başka Sayfa Kontrollerini Elde Etme)
• CrossPageCevap.aspx sayfasının
aşağıda verilen kodları yazalım
Page_Load
olayına
• PreviousPage.FindControl ifadesiyle bir önceki sayfada id’si
txtad olan TextBox kontrolünü elde edip tip dönüşümü
yapıyoruz. Diğer bir ifadeyle yeni sayfamıza elde ettiğimiz
kontrolün bir TextBox elemanı olduğunu bildiriyoruz. Ve
sonrasında onun metin (text) değerini elde ediyoruz.
• PreviousPage.Title ifadesi ile de bir önceki sayfada title
etiketleri arasında yazan ifadeyi elde ediyoruz
ASP.NET İLE COOKİES
HTTPCOOKİE NESNESİ
• ASP.NET de oturum boyunca, yani kullanıcının sunucuya bağlı
olduğu sürece (hatta ileriki bir zamanda bağlandığı durum için)
kullanabileceğimiz özel değişken tanımlamaları vardır.
• Bunlar Cookie ve Session değişkenleridir.
• Cookie, kullanıcının bilgisayarında tutulan ve sunucunun kullanıcılar
hakkında bir takım bilgiler elde edebildiği değerleri saklayan küçük
dosyalardır.
• Bu değerler, sayfadan sayfaya geçerken veya ileriki bir zamanda
kullanılmak için, kullanıcının Password, kullanıcı ismi, tercihleri gibi
bir takım özel bilgileri olabilir.
• Bu bilgiler browser açık olduğu sürece veya bizim daha önceden
belirlediğimiz zaman süresince Cookie dosyalarında saklanır.
ASP.NET İLE COOKİES
HTTPCOOKİE NESNESİ
• Bu Cookie dosyaları sayesinde ileriki bir zaman da bile kullanıcının
tercihlerini bilebilir ve sayfalarımızı buna göre düzenleyebiliriz.
• Cookie' ler web sitesi ile kullanıcısı arasındaki bağlantıyı sürekli
kılar ve kullanıcı her seferinde aynı bilgileri girmek zorunda kalmaz.
• Örneğin daha önceden alış-veriş yaptığınız bir siteye uzun bir
zaman sonra tekrar girdiğinizde, site sizi tanır(isminiz ve
tercihlerinizle hitap eder) ve buna göre bir sayfa oluşturur.
• İşte bu Cookie 'ler sayesinde olur.
ASP.NET İLE COOKİES
HTTPCOOKİE NESNESİ
• HttpCookie nesnesi, Cookie ’lerin oluşturulması, oluşturulmuş
Cookie’lere erişimi kısacası Cookie' ler ile ilgili tüm işlemlerin
yapılmasını sağlar.
•
Cookie tanımlaması yaşam sürelerine göre ikiye ayrılır.
1- Kalıcı Olmayan Cookie: Cookie'nin oturum süresince yani
tarayıcının kapanmasına kadar geçen zaman boyunca
yaşamasını sağlayabiliriz.
2- Kalıcı Cookie: Cookie'nin oturum sonlansa bile yaşamasını
sağlayabiliriz. Böylece girilen değerler günlerce Cookie olarak
saklanabilir.
.
Cookie’lerin Oluşturulması
• Cookie ’ler temel olarak iki şekilde oluşturulur.
• Birinci yöntemde her bir değer için ayrı bir Cookie
oluşturulurken ikinci yöntemde bir Cookie ismi altında farklı
anahtarlar ile farklı değerdeki Cookie’ ler oluşturulabilir.
• Bir
Cookie'nin
oluşturulması
aşağıdaki
gibi
yapılır:
• Bu bildirim ile adı renk olan ve Kırmızı değerini tutan bir
Cookie oluşturulmuştur. Artık renk Cookie ’si oturum boyunca
(browser kapatılıncaya kadar) bu değerde olacaktır.
• Oluşturulan bir Cookie'nin değerinin tekrar elde edilmesi ise
aşağıdaki
şekilde
yapılacaktır:
• Bu bildirim ile renk adındaki Cookie değeri elde edilip istenen
bir yerde kullanılabilir.
Cookie’lerin Oluşturulması
• Örnek olarak bir sayfada Cookie oluşturup, elde ettiğimiz bu
Cookie değerini farklı bir sayfada kullanalım:
• cookieOlustur.aspx
sayfasını
aşağıdaki
gibi
hazırlayın
• Giriş butonunun Click olayına aşağıdaki kodları yazalım:
Cookie’lerin Oluşturulması
• Link butonun Click olayına aşağıdaki kodları yazalım:
• Not: Response nesnesinin Redirect metodu belirtilen sayfaya
yönlendirme yapmak için kullanılır
Cookie’lerin Oluşturulması
• cookieGoster.aspx sayfasını aşağıdaki gibi hazırlayın
• Cookie Değerlerini Elde Et butonunun click olayına aşağıdaki
kodları yazalım:
Kalıcı Cookie
• Cookie’ ler aksi belirtilmedikçe, oturum süresince geçerlidir. Bunun
anlamı browser kapatılınca silinir ve hiçbir geçerliliği kalmaz.
• Cookie’lerin geçerlilik süresini Expires yöntemi ile yönetmek
mümkündür
• Response.Cookies["renk"].Expires=DateTime.Parse("22/02/2013");
bildirimi ile renk adındaki Cookie nin belirtilen tarihe kadar kullanıcının
bilgisayarında saklanmasını sağlayabiliriz
• Expires tanımlamasını göreceli bir tarih vererek de yapabilirsiniz:
• Response.Cookies["renk"].Expires = DateTime.Now.AddMonths(1);
Bildirimi ile oluşturulan Cookie 1 ay ziyaretçinin bilgisayarında saklanır,
daha sonra silinir.
Cookie ’lerde Anahtar Kullanımı
•
Cookie oluşturmanın diğer yolu aynı Cookie ismi altında farklı anahtarlar ile
farklı değerler tutan Cookie oluşturmaktır
•
Bu ifadenin yazılışı aşağıdaki gibidir:
•
Response.Cookies["Cookie ismi"]["anahtar isim"] = "değer"
•
Response.Cookies["ziyaretci"]["parola"] = "12345";
•
Ziyaretçi isimli Cookie miz parola anahtar ismi ile oluşturuluyor, bu
yöntemde ziyaretçi adı ile oluşturulan Cookie ‘ye başka değerler de atamak
mümkün
•
Yukarıda oluşturulan Cookie nin elde edilmesi:
•
Request.Cookies["ziyaretci"]["parola"];
•
Bildirimi ile olur.
•
Anahtar isimlendirme ile oluşturulan Cookie ler anahtar ismi ve değeri ile
bir dizi oluştururlar.
Cookie’lerde Anahtar Kullanımı
•
Örnek olarak yine iki sayfamız olsun. İlk sayfada anahtar kullanımı ile cookie’leri
oluşturup, diğer sayfada oluşturduğumuz Cookie değerlerini elde edelim.
•
CookieOlustur_2.aspx sayfasında Page_Load yordamı altına aşağıdaki kodları
yazalım:
•
CookieGoster_2.aspx sayfasında Page_Load yordamı altına aşağıdaki kodları
yazalım:
ASP.NET ile SESSION
• Session, bir web sunucusuna bağlandığımızda bize verilen bir
kimliktir.
• Session kelime anlamı olarak oturum demektir ve Session
değişkenlerinin ömürleri de bir oturum süresindedir.
• Bir oturum ise, browserın açılıp kapanmasına kadar geçen süredir.
• İstemci sunucuya bağlandığı zaman, sunucu, sadece o istemciye
özel bir Session ID numarası atar ve bunu bir Cookie ’de saklar
• Böylece bir oturum boyunca sadece o kullanıcıya özel değerleri
saklar ve elde eder.
• Örnek olarak kullanıcı adınız ve şifrenizle girdiğiniz bir web
uygulamasında, sayfalar arasında gezinmeniz, yeni pencere
açmanız gibi durumlarda SessionID değeri ile sunucu tarafından
tanınırsınız ve doğru sayfalara erişebilirsiniz.
ASP.NET ile SESSION
• Sunucu tarafından istemciye verilen bu SessionID değerine erişmek
mümkündür
• Bunun için ASP.NET sayfanızda Session. SessionID bildirimini
yazmanız yeterlidir.
• Sayfayı yenilemeniz ya da farklı bir pencere açmanız
durumunda bu ID değişmeyecektir. Çünkü oturumunuz
sonlanmamıştır. Ancak tarayıcınızı kapatıp geri açtığınızda
oturumunuz sonlanacağı için yeni bir SessionID değeriyle
karışılacaksınız.
ASP.NET ile SESSION
• Bir Session oluşturmak için aşağıdaki bildirimlerden biri kullanılır:
• Session.Add(değişken_ismi, değer);
veya
• Session["değişken_ismi"] = değer;
• Oluşturulan session’a Session["değişken_ismi"] yazarak
erişebilirsiniz.
ASP.NET ile SESSION
•
Örnek olarak 3 sayfamız olsun. Default.aspx, sayfa2.aspx ve sayfa3.aspx.
•
Default.aspx sayfasını aşağıdaki gibi oluşturalım:
•
Default.aspx sayfasında Page_Load yordamı altına aşağıdaki kodları yazalım:
•
Default.aspx sayfasında Session’a Ekle butonunun click olayı altına aşağıdaki
kodları yazalım:
ASP.NET ile SESSION
• sayfa2.aspx ve sayfa3.aspx sayfalarında ise Page_Load yordamı
altında oluşturulan session değerini almak için gereken aşağıdaki
kodları yazalım
• Sayfalar arasında dolaştığınızda ya da sayfayı yinelediğinizde size
atanmış olan session ID’nin değişmediğini göreceksiniz.
• Bu session ID ancak browser’ı kapatıp tekrar sayfayı yüklediğinizde
yenilenecektir.
ASP.NET ile SESSION
•
Session’lar oturum sonlandığında iptal edilirler ve bir oturum 2 şekilde
sonlanabilir
•
Kullanıcı tarafından browser kapatıldığında ya da tanımlanmış bir süre
aşıldığında
•
Diyelim ki bir kullanıcı browser’ı açtı, sayfayı yükledi ve uzunca bir süre
sayfada bir eylem gerçekleştirmedi. Bu durumda belirli bir süre sonra (bu
süre hiçbir şey belirtilmemiş ise 20 dakikadır) oturum kendiliğinden
sonlandırılır (timeout)
•
Oturumun sonlanacağı süre yani Timeout süresi değiştirilebilir.
•
Bunun için aşağıdaki şekilde bir bildirim yapılmalıdır:
•
Session.Timeout = dakika_degeri;
•
Session nesnesini aniden sonlandırmak için ise Abondan metodu kullanılır.
•
Session.Abandon();
ASP.NET ile SESSION
•
Varsayılanda 20 dakika olan bu timeout süresini arttırmamak için bir çok
neden vardır:
•
Sunucuya kullanıcılar bağlandığında her biri için ayrı bir session nesnesi
ve takibi oluşturulur, başka bir ifadeyle, her bir kullanıcı için sunucunun
hafızasında bir yer işgal edilir. Kullanıcı 1 dk. bile sitede kalsa, geri kalan
19 dk. boyunca bu kullanıcı için session nesnesi sunucuda tutulur
•
Biz bu değeri ne kadar arttırırsak süre o kadar uzar ve sunucu üzerindeki
yük artar
•
Bunun yanında e-ticaret sitelerinde, alışveriş esnasında, kullanıcı bilgilerini
saklayan Session değişkenlerinin zamanını çok kısa tutmak veri kaybına
neden olabilir.
•
Session zamanını ayarlarken sunucunuzun yük durumunu, sitenizin ve
ziyaretçilerinizin karakteristiğini göz önünde bulundurmalısınız.
•
Ancak birçok durum için 20 dk. ideal bir süredir.
ASP.NET ile SESSION
•
Varsayılanda 20 dakika olan bu timeout süresini arttırmamak için bir çok
neden vardır:
•
Sunucuya kullanıcılar bağlandığında her biri için ayrı bir session nesnesi
ve takibi oluşturulur, başka bir ifadeyle, her bir kullanıcı için sunucunun
hafızasında bir yer işgal edilir. Kullanıcı 1 dk. bile sitede kalsa, geri kalan
19 dk. boyunca bu kullanıcı için session nesnesi sunucuda tutulur
•
Biz bu değeri ne kadar arttırırsak süre o kadar uzar ve sunucu üzerindeki
yük artar
•
Bunun yanında e-ticaret sitelerinde, alışveriş esnasında, kullanıcı
bilgilerini saklayan Session değişkenlerinin zamanını çok kısa tutmak veri
kaybına neden olabilir.
•
Session zamanını ayarlarken sunucunuzun yük durumunu, sitenizin ve
ziyaretçilerinizin karakteristiğini göz önünde bulundurmalısınız.
•
Ancak birçok durum için 20 dk. ideal bir süredir.
COOKİE’siz SESSION KULLANIMI
•
Sunucu tarafından ziyaretçilere
dosyalarında saklanır.
•
Bazı istemci tarayıcılar Cookie desteğine sahip değildir ve ya bu özellikleri
bilerek kapatılmıştır.
•
Peki böyle bir durumda istemci bilgisayar kendisi için sunucuda açılan
oturum ile nasıl eşleştirilir?
•
Bu sorun, ASP.NET_SessionId değerinin site içinde hareket edilen
sayfaların linklerine eklenerek çözülmüştür.
•
Asp.Net bunu bizim için otomatik olarak yapmaktadır.
•
Tek yapmamız gereken web.config dosyasında sessionState elemanında,
Cookieless özelliğine true değerini atamaktır.
•
atanan
SessionID’ler
geçici
cooie
Eğer örneğimizi bu haliyle denersek sayfalar arası gezinirken Session_ID
bilgisinin otomatik olarak URL bilginin önüne eklendiğini görürüz
ASP.NET ile APPLICATION STATE
•
•
Application, ziyaretçiden ziyaretçiye değişmeyen, her ziyaretçi için geçerli
olan değişkenlerdir.
Herhangi bir ziyaretçi Application değişkeninin değerini 1 arttırıp 10
yaptığında, artık bu değer o sitenin tüm kullanıcıları için 10’dur
ASP.NET ile APPLICATION STATE
•
Application State Oluşturma:
•
Application State Değeri Alma:
•
Application State Silme:
•
Oluşturmuş olduğumuz Application State'ler Sunucu taraflı saklandığı için
Sunucumuz üzerinde yük oluşturacaktır.
Bu yüzden kullanmaya ihtiyacımız olmadığı durumlarda Application
State'leri silmemiz gerekir.
•
•
Application State Tamamını Silme:
ASP.NET ile APPLICATION STATE
•
Application State’lerin kullanımı hakkında en iyi örneklerden biri sitedeki online
ziyaretçi sayısını hesaplama uygulamasıdır.
•
Oturum yönetiminde işimize yarayacak iki olay vardır.
•
Session_Start ve Session_End olayları.
•
Bir istemci bir web sunucusunda bir oturum başlattığında uygulamaya ait
global.asax dosyasında yer alan Session_Start olayı çalışır.
•
Oturum herhangi bir neden ile sonlandığında ise yine global.asax dosyasındaki
Session_End olayı çalışır.
•
Bu olaylar yardımıyla, uygulamanızda oturum halinde bulunan kullanıcı sayısını bir
başka deyişle sayfadaki ziyaretçi sayısını öğrenebilirsiniz.
•
Sitemize giren her kullanıcı Global.asax içindeki SessionStart'ı çalıştırmış olur ve
sitemizden çıkan her kişide Session_End'i çalıştırmış olur.
•
Biz Session_Start'a gelen her kullanıcı için Online Ziyaretçi sayımızı 1 artıracağız.
•
Session_End'e gelen her kullanıcı için ise Online Ziyaretçi sayımızı 1 azaltacağız.
•
Böylece Online Ziyaretçi sayımızı güncel olarak tutmuş olacağız.
ASP.NET ile APPLICATION STATE
•
Öncelikle aşağıda verilen yolu izleyerek global.asax dosyasını sitemize ekleyelim:
ASP.NET ile APPLICATION STATE
•
global.asax dosyasında aşağıda verilen tanımlamaları yapalım:
•
Uygulamanın başladığını ifade eden Application_Start() olayının altında
online ziyaretçi sayımızı tutacak bir application nesnesi tanımlayıp 0
değerini atıyoruz.
•
Uygulamanın sonlandığını ifade eden Application_End() olayının altında
online ziyaretçi sayısı için tanımlamış olduğumuz application nesnesini
siliyoruz
ASP.NET ile APPLICATION STATE
•
Yeni bir oturumun başladığını ifade eden Session_Start() olayının altında
eğer online ziyaretçi sayısı olarak isimlendirdiğimiz Application nesnesinin
değeri 0 ise yani ilk kez oturum açılıyor ise Application değerini 1 yapıyoruz.
•
Eğer ilk kez oturum açılmıyor ise var olan değeri 1 arttırıyoruz.
ASP.NET ile APPLICATION STATE
•
Var olan bir oturumun sonlandığını ifade eden Session_End() olayının
altında Application nesnesi içinde saklanan değeri 1 azaltıyoruz.
•
Kodda dikkat ederseniz Application nesnesinin değerini deger isimli
değişkene alırken (int) tür dönüştürme operatörünü kullandık.
•
Bunun sebebi, Application nesnesininde Session nesnesi gibi verileri
object tipinde saklıyor olmasıdır.
•
Dolayısıyla Session veya Application nesnelerinin değerlerini okurken
uygun tür dönüşümlerini açıkça yapmamız gerekmektedir.
ASP.NET ile APPLICATION STATE
•
Bu şekilde Online Ziyaretçi sayımız bizim için sürekli olarak hesaplanacaktır.
•
Burada oluşturduğumuz Application["onlineziyaretcisayisi"] nesnemizi
istediğimiz bir sayfada kullanabilir ve görüntüleyebiliriz.
•
Örneğin application.aspx adında bir sayfa açıp sayfanın Page_Load
yordamı altında yapacağımız aşağıdaki tanımlama Label kontrolünde online
ziyaretçi sayısını gösterecektir.
•
Her
sayfada
kullanabilirsiniz.
görünmesini
istiyorsanız
MasterPage'iniz
içinde
• KAYNAK
• C# ile ASP.NET
• Zafer Demirkol

Benzer belgeler