Session nedir, ne işe yarar?

Session, bir oturum nesnesidir. Ziyaretçiler bir web sunucusundan herhangi bir sayfayı talep ettiğinde, sunucu bilgisayarlar gelen ziyaretçilerin herbirine ayrı ayrı oturumlar başlatır. Peki bu farklı oturumları nasıl birbirinden ayırt etmektedir? Şöyle ki Asp.Net sunucularında oturum sahiplerini tanıyabilmek için özel bir algoritma ile oluşturulan tanımlayıcı bir değer kullanılır. Bu tanımlayıcı değerlere SessionID denilmektedir. İşte ziyaretçiler bu SessionID değerlerine göre birbirinden ayırt edilmektedir.

Session nesneleri yardımıyla kullanıcılara ait oturum bilgileri sayfalar arasında taşınabilmektedir. Tabii ki bu bilgi taşıma olayı sonsuza kadar değildir. Bu süre Session’a atanan oturum süresi boyunca devam etmektedir. Session’ın son bulması için sadece belirlenen bu oturum süresinin dolması da gerekmez. Kullanıcı eğer geçerli olan tarayıcıyı kapatırsa oturumu otomatik olarak son bulacaktır. Ya da sunucu bilgisayarda oluşabilecek sorunlardan dolayı da oturumlar son bulabilir. Session’da kullanıcıya ait pek çok bilgi tutulabilir (Örneğin; kullanıcı adı, soyadı, şifresi, ip adresi vs.). Genel olarak Session nesnesinin kullanımına verilebilecek en güzel örnek alışveriş siteleridir. Burada kullanıcının sepetine ait olan bilgiler Session’da tutulup site içerisinde sayfalar arasında taşınabilmektedir.

Şimdi bu Session olayını bir de resim ile gösterelim.

Resimde de görüldüğü gibi, Client (istemci bilgisayar) Server’dan (sunucu bilgisayar)bir talepte bulunur ve sunucu bilgisayardan kendisine bu talep doğrultusunda bir oturum açılır ve SessionID atanır. Oturum süresi boyunca bu da SessionID değerine göre tanınır.

By mert

Asp.Net’de Cookie İşlemleri

Cookie client yani ziyaretçi bazlı veri saklanmasına yarayan bir yapıdır. Cookie browser da saklanır silinme zamanı geldiğinde browser cookie yi otomatikman siler. Client bazlı olduğu için önemli bilgilerin cookie ye atılmamasına dikkat edilmelidir.

Cookie browser da tutulan bir yapıdır. Örneğin Firefox ile bir E-Ticaret web sitesine girdiniz ve üye girişi yapmadan sepetinize ürünler eklediğinizde büyük bir ihtimal ile sepet bilgileriniz cookie olarak browser da saklanıyordur. Firefox da gezindiğiniz ve cookie yi silmediğiniz sürece sepet bilgileriniz saklanacaktır. Aynı anda Internet Explorer da o web sitesine girdiğinizde sepetinizin boş olduğunu görürsünüz, çünkü sepet cookie si Firefox tarayıcısındadır. Session bilgileri de cookie de tutulur, örneğin Facebook’a giriş yapıp sonra da browser ın cookie sini temizlerseniz (Ctrl + Shift + Delete) çıkış yapmış olursunuz.

Asp.Net de cookie yazma işlemi Response nesnesi ile, cookie okuma işlemi Request nesnesi ile yapılır. Bir cookie de 1 ve 1 den fazla değer tutulabilir. Cookie yazma işlemi aşağıdaki gibidir.

HttpCookie c = new HttpCookie("MyCookie", "değer"); /*MyCookie isminde cookie oluşturduk ve value sine değeri atadık*/

c.Expires = DateTime.Now.AddDays(30); /*Cookie nin geçerli olacağı süreyi belirttik */

HttpContext.Current.Response.SetCookie(c); /*Response nesnesi ile oluşturduğumuz cookie yi ziyaretçinin tarayıcısına yazdırdık. */

Burada dikkat edilmesi gereken nokta oluşturduğumuz cookie yi Response nesnesi ile yazıyor olmamızdır. Response.SetCookie(c); komutu olsaydı cookie nesnesi ziyaretçinin browserına kayıt edilmiş olmazdı. Cookie okurken ise Request nesnesini kullanacağız.

HttpCookie MyCookieObject = Request.Cookies["MyCookie"];

Yukarıdaki satır da MyCookie bulunamaz ise geriye null değeri verir. MyCookieObject i kullanarak aldığımız cookie ile ilgili işlemler yapabiliriz. Cookie nin değerini okumak için HttpCookie nesnesinin value property sini kullanabiliriz.

string value = MyCookieObject.Value;

Cookie silmek için ise Response.Cookies.Remove metoduna silmek istediğimiz cookie nin adını veririz.

Response.Cookies.Remove("MyCookie");

Bir cookie de birden fazla değer de tutulabilir. Bunun için HttpCookies in Values Property si kullanılır.

HttpCookie cSepet = new HttpCookie("Sepet");
cSepet.Values["1"] = "5";
cSepet.Values["2"] = "10";
cSepet.Values["4"] = "15";
cSepet.Expires = DateTime.Now.AddDays(1o);
Response.Cookies.Add(cSepet);

Yukarıdaki kod ile Sepet cookie sinde 1,2,4 key değerleri ile birden fazla veri tutulmaktadır. Sepet cookie sini okurken ise Request.Cookies ile cookie yi okuyup HttpCookie nesnesinin values property si ile bu cookie nin key değerleri alınır ve bu key değerlerinin value leri okunur.

string ID, Adet;

HttpCookie cSepet = Request.Cookies["Sepet"];

foreach (string item in cSepet.Values) /* Sepet cookie sindeki key lerin listesi string[] */

{

ID = item;

Adet = Request.Cookies["Sepet"][item]; /* Sepet cookie sindeki key lerin değerleri okunur */

}

Sepet cookie sindeki bir key in değerini güncellemek için ise önce sepet cookie si HttpCookie nesnesine atılır. Key boş olarak tekrar setlenir ve cookie tekrar yazılır.

HttpCookie cSepet = Request.Cookies["Sepet"];
cSepet.Values["2"] = "";
Response.Cookies.Add(cSepet);

Cokiee nedir? Ne işe yarar?

Cookie kelimesi “web sayfası sunucusunun sizin bilgisayarınızın hard diskine yerleştirdiği ufak bir text dosyası” için kullanılmaktadır. Yani, o web sitesinin bir sonraki ziyarette sizi tanıması için geçerli bir bilgidir bu. Bu text dosyası bir komut dosyası olmadığı gibi, virüs de değildir. Size özel bir tanımlamadır ve sadece bu kodu tanımlayan web sunucusu tarafından okunabilir. 

Cookie’nin amacı; sizin o siteyi yeniden ziyaret ettiğinizi web sunucuya bildirmekten ibarettir.

Ne işe yarar?

Sizi zaman kaybından korur. Kendinize kişiselleştirdiğiniz bir sayfanız varsa ya da bir ürün ya da servis için kayıt olmuşsanız, bu cookie sizi hatırlatır. Bir sonraki dönüşünüzde, istediğiniz bilgiler ekrana gelir (mesela otomatik hatırlanmasını istiyorsanız, hatırlar). Aynı web sitesinden yeni bir servis için kayıt olduğunuzda da daha önce verdiğiniz cevapları otomatik olarak hatırlar. Yani web siteleri sizi bu cookie’ler yardımıyla hatırlar. Bilgileri değiştirdiğiniz takdirde ise yeni haliyle hatırlar.

Html Form Action daki Get ve Post nedir, ne işe yarar?

GET ve POST yöntemleri kullanım olarak birbirine çok benzeyen iki farklı yöntemdir. Şimdi bu yöntemlerden hangisi ne zaman kullanılır görelim.

GET :
HTTP istekleri arasındaki varsayılan yöntemdir. GET metodu genellikle tarayıcıların adres çubuğundaki isteğin (querystring) 512 karakteri geçmediği yerlerde HTML sayfası almak veya bir resim görüntülemek istendiğinde kullanılır. GET metodu ile yapılan istekler tarayıcının adres satırında görünür. Sadece belirli boyutta veri gönderileceği zaman kullanılır.

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-9"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <body>
    <form action="<c:url value="/loginCheck" />">
      <table border="1">
        <tbody>
          <tr><td>Username :</td><td><input type="text" name="username"/></td></tr>
          <tr><td>Password :</td><td><input type="password" name="password"/></td></tr>
        </tbody>
      </table>
      <input type="submit" value="Login" />
   </form>
   <font color=red><b>${error}</b></font><br/>
  </body>
</html>
Tarayıcının adres çubuğu aşağıdaki gibi olacaktır.
POST:
POST metodu ise URL’de görünmesini istemediğimiz veriler olduğunda, dosya yükleyeceğimiz zaman, querystring’in çok büyük olduğu durumlarda kullanılır. İstek yaparken gönderdiğimiz parametreler tarayıcıların desteklediği formatlarda olmayabilir. Örneğin Japonca bir kelimeyi ya da Arapça’da bir harfi parametre olarak gönderirken tarayıcılar bu karakterleri anladıkları formata çevirirler. Bu da genellikle uzun bir ifadeye denk gelir. Normalde kendi dilinde kısa olan bir kelime, parametre geçilirken URL’nin büyümesine sebep olur. Bu gibi durumlarda da yine POST metodunu kullanmak tavsiye edilir.

POST yönteminde gönderebileceğimiz verinin boyutu ile ilgili bir sınır yoktur. Ayrıca gönderdiğimiz parametrelerin adres satırında görünmemesi dolayısıyla GET yöntemine göre daha güvenlidir. HTML form gönderileceği zaman neredeyse her zaman POST yöntemi tercih edilir.
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-9"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
 <body></span>
  <form action="<c:url value="/loginCheck" />" method="post">
   <table border="1">
    <tbody><span style="color: #000000;"> <tr><td>Username :</td><td><input type="text" name="username"/></td></tr>
     <tr><td>Password :</td><td><input type="password" name="password"/></td></tr>
     </tbody>
   </table>
    <input type="submit" value="Login" />
 </form>
 <font color=red><b>${error}</b></font><br/>
 </body></span>
</html>
Tarayıcının adres çubuğu aşağıdaki gibi olacaktır.
Dikkat ettiyseniz isteği GET ile gönderdiğimizde adres çubuğunda parametre isimleri ve değerleri görünürken POST ile gönderdiğimizde görünmemektedir.