Javascript ile cookie oluşturma ve okuma

Şubat 2013 | Hakan Köse, İnternet Girişimcisi
Javascript ile kullanıcıya özel cookie (çerez) oluşturma ve okuma işlemi aslında gayet basit bir işlem. Ancak kritik olduğunu düşündüğüm bazı bilgiler var ve bunları paylaşmak istiyorum.

Şöyle ki; cookie oluşturma işlemi gayet basit:

var cookiename = "mycookie";
var cookievalue = "mycookievalue";
var expiredate = "Sat, 16 May 2013 18:40:22 GMT";

document.cookie = cookiename + "=" + cookievalue + ";" + expiredate;

Gördüğünüz üzere gayet basit bir işlem. Benzer şekilde cookie okuma işlemi de çok basit:

function readCookie(key) {
currentcookie = document.cookie;
if (currentcookie.length > 0) {
firstidx = currentcookie.indexOf(key + "=");
if (firstidx != -1) {
firstidx = firstidx + key.length + 1;
lastidx = currentcookie.indexOf(";", firstidx);
if (lastidx == -1) {
lastidx = currentcookie.length;
}
return unescape(currentcookie.substring(firstidx, lastidx));
}
}
return "";
}

Ancak dikkat edilmesi gereken bazı kritik noktalar var.

Bunlardan bir tanesi, cookie oluştururken bu cookie'nin nerelerde okunabilir olduğunun belirtilmesi. Bunu yapmak için "path" diye bir parametre bulunuyor ve bu parametre oluşturulan çerezin hangi konum ve alt konumlarından okunabileceği bilgisini belirtiyor.

var cookiename = "mycookie";
var cookievalue = "mycookievalue";
var expiredate = "Sat, 16 May 2013 18:40:22 GMT";

var cookiepath = "/announcements/";
document.cookie = cookiename + "=" + cookievalue + ";" + expiredate + ";path=" + cookiepath + ";";

Bu path parametresi "announcements" olarak ayarlandığında sadece announcements ve alt dizinlerinden çereze okuma sağlanabiliyor. Bu parametrenin belirtilmemesi durumunda oluşan kritik bir durum daha var. Eğer çerezi hangi sayfada oluşturdu iseniz, path parametresi default olarak o konumun değerini alıyor. Dolayısıyla, bir başka sayfada cookie varlığını kontrol etmek istediğinizde böyle bir çerez olmadığı bilgisi geliyor ki bu bıraktığınız çerezi o sayfa dışında anlamsız hale getiriyor.

Eğer tüm site genelinde bu çerezi erişilebilir hale getirmek isterseniz path parametresini "/" olarak ayarlamalısınız.

Ek bir bilgi olarak belirtmek isterim ki, bu "path" parametresi sadece dizin değil, domain ve sub domain'ler ile de çerezin çalışılabilir hale getirilmesinde faydalı bir parametredir. Öyle ki, path parametresini ".mysite.com" şeklinde belirttiğinizde çerez sadece mysite içinde değil, sub domain'lerinde de erişilebilir hale geliyor. Örneğin;

//sub1.mysite.com/announcements/
//sub2.mysite.com/announcements/
var cookiepath = ".mysite.com/announcements/";

Umarım bu bilgiler faydalı olur.