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