ASP.NET MVC ile DURUM YÖNETİMİ
Web uygulamalarında sunucu ile istemci arasında gerçekleşen iletişim sırasında sunucu tarafından oluşturulup istemciye gönderilen bilgiler ile istemci tarafından gelen bilgiler geldikleri ya da oluşturuldukları noktalarda kalıcı değillerdir. Mesela bir sayfayı çağırdınız sunucuya sizin bu sayfayı çağırdığınıza dair istek gider. İstek değerlendirilir ve o sayfa sunucu tarafından oluşturulup istemciye gönderilir. Ve istemcinin tarafında oluşturuldulduktan sonra bu sayfa silinir. Tekrar bu bilgilere erişebilmek için tekrar çağırım yapmamız gerekmektedir. Ya da Durum Yönetimi konseptini kullanmalıyız.
Burdaki asıl amaç bazı bilgileri tutup tüm sayfalardan o bilgilere erişim sağlayabilmektir. Şöyle düşünün bir siteye bilgilerinizle giriş yapıyorsunuz ve girdiğinizde artık üye yetkisiyle o site içerisinde hareket ediyorsunuz ama sayfayı değiştirdiğiniz an tekrar misafir yetkisine dönüyorsunuz. Peki bu durumda ne yapmak lazım o an girilen bilgilerin tutulup tüm sayfalarda işler hale getirmek lazım
ya da daha basit bir örnek verirsek üye olarak giriş yaptıgınız bir sitede genelde sol üst köşede isminiz yazar mesela “Çağatay KIZILTAN” gibi, ne kadar sayfa değiştirriseniz değiştirin o hep orada kalır bu durum yönetimi sayesindedir.
2 çeşit durum vardır.
1. Sunucu tabanlı durumlar
2. Kullanıcı tabanlı durumlar
1.SUNUCU TABANLI DURUMLAR
1.1 Oturum yönetimi (session state)
Session sunucu tabanlı bir durum yönetimidir ve veri saklama işlemi için kullanılır ve bu saklanan veriye site içerisindeki tüm sayfalardan erişilebilir. Ve bir session bir oturum süresince hayatta kalır.
Örneğin bir siteye bilgilerinizle giriş yaptınız ve bu size bazı yetkiler verdi . Yorum yapma , ürün satın alma, üyelik bilgilerini sorgulama vs. Ama sadece bir kere üyelik girişi yapmanız yeterlidir. Bu işlemler session ile kolaylıkla yapılabilir.
Her session 1 üye demektir .
Örneğin : 500 üye girişi = 500 session nesnesi.
a. Session Tanımlama
Session.Add(“Session Adi”,”Deger”);
Ya da
Session[“Session adi”] = Deger;
Şeklinde session tanımlanabilir
b. Session Değeri Okuma
Diyelimki bir session değeri tanımladıgınız artık diğer tüm sayfalarda bunu okumak istiyorsunuz. Farzezinki yukarıdaki session index() içinde tanımlandı about içinde okunmak isteniyor.
public ActionResult About()
{
ViewBag.Message = Session[“yazar”];
return View();
}
ViewBag.Message view’ın istenilen her yerinde artık kullanılabilir.
c. Session Silme
Session.Remove(“yazar”);
d. Session Varlığını Kontrol Etme
If(Session[“yazar”]==null) ViewBag.Message=”session yok”; else ViewBag.Message=”session var”;
f. Session Yaşam Süresi Belirleme
Ne demiştik her session bir oturum bir üyelik gibi düşünün ve geçerli oldugu sürece sitenin hertarafından erişilebilir ve siz de o yetkiyle çoğu yere erişebilirsiniz ancak her oturumun bir süresi vardır. Bunu genelde okul ve banka sitelerinde çoklukla görürsünüz. Bir süre sonra oturumdan sizi atar ve sürenin doldugunu söyler. İşte durum tam olarak bu.
Her sessionun bir yaşam süresi vardır hiç bir değişiklik yapılmazsa bu 20 dakikadır.
Bu ayarlar Web.config dosyasi içerisinden yapılır
<system.web>
<authenticationmode="None" />
<compilationdebug="true"targetFramework="4.5.2" />
<httpRuntimetargetFramework="4.5.2" />
<httpModules>
<addname="ApplicationInsightsWebTracking"type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule,Microsoft.AI.Web"/>
</httpModules>
<sessionState timeout=”20”> </sessionState>
</system.web>
Web config dosyasının içinde system.web etiketleri arasında <sessionState timeout=”20”></sessionState>etiketleri vardır yoksa siz ekleyin. Buradaki timeout=”20” dakika cinsinden sessionun yaşam süresidir.
1.2 Uygulama Yönetimi (application state)
Şimdi bu application state ile session state’in farkı nedir ? bunu anlayınca konuyu anlamış olucaksınız diye tahmin ediyorum.
Session state’de durum neydi . Bir oturum açılırdı ve o oturum açık oldugu sürece o bilgilere diğer sayfalardan erişilebilirdi.Bunun için üyelik sistemini örnek vermiştik siz üyeyken adınız her sayfada sag üst köşede çıkar veya bazı üyelik işlemlerini o yetkiyle yapabilirsiniz demiştik. Ama burda püf nokta bilgiye erişme ve yetki işlemi sadece o oturuma özeldir. Sizin bilgilerinize ve yetkilerinize sadece siz oturumunuz açık oldugu sürece yapabcilirsini.Sizin dışınızdaki erişemez ve o kişi de kendi oturumundan sorumludur.
Application state’de durum farklı bir tane dinamik bilgi var ve buna herkes erişebilir. En basitinden sitemizde kaç kişi online gibi uygulamalar. Siteye her 1 kişi girdiğinde bir session oluşur ve sitedeki online kişi sayısı 1 artar ve diyelimki 10dan 11e çıkar ve bu bilgiyi sitedeki tüm kullanıcılar görebilir. Ozaman bu uygulamayı konu sonunda yapalim madem [Simge]
a. Application değeri tanımlama
HttpContext.Application.Add(“site yoneticisi”,”cagatay”); // “nesne adi” , “deger” şeklinde
HttpContext.Application[“Site Yoneticisi”]=”cagatay”;
b. Application değeri okuma
public ActionResult About()
{
ViewBag.Message=HttpContext.Application[“Site Yoneticisi”];
return View();
}
c. Application değeri silme
HttpContext.Application.Remove[“Site Yoneticisi”];
d. Aplication nesnesi varligini kontrol etme
If(HttpContext.Application.Remove[“Site Yoneticisi”]==null)
ViewBag.Message=”session yok”;
else
ViewBag.Message=”session var”;
ISTEMCI TABANLI DURUMLAR
Bu kullanıcı bilgileri , uygulamanın çalıştırıldıgı sunucu üzerined değil , istemci (Sayfayı çağıran bilgisayar) üzerinde bulunmaktadır.
- Cookie (Cerezler)
a.1 Cookie tanımlama
oluşturma
HttpCookie cookieKullanici = new HttpCookie(“kullanici”,”veysel”);
ekleme
HttpContext.Response.Cookies.Add(cookieKullanici);
a.2 Cookie Değer Okuma
ViewBag.Kullanici = HttpContext.Request.Cookies[“Kullanici”].Value;
a.3 Cookie Değerini Silme
HttpContext.Request.Cookies.Remove(“Kullanici”);
a.4 Cookie varlıgını kontrol etme
if( HttpContext.Request.Cookies[“kullanici”]==null )
ViewBag.Message = “Cookie Yok”;
else
ViewBag.Message = “Cookie Var”;
a.5 Cookie yaşam süresi belirleme
cookieKullanici.Expires = DateTime.Now.AddDays( 1 );