PHP’de çerezler (cookies)

php çerezler - cookiesWeb yazılım ile ilgileniyorsanız çerezlerle er ya da geç karşılaşmışsınızdır. Bu yazıda; çerez nedir, ne işe yarar, nasıl kullanılır, nasıl alınır, nasıl silinir konularını açıklayacağım.

Çerezler (cookies), sonradan kullanmak için kullanıcının bilgisayarına sakladığımız verilerdir. Aynı veriyi almak için her seferinde sunucuda/veritabanında işlem yapmak yerine yükü azaltmaya da yarar. Farkedebileceğiniz en yaygın kullanımı, kullanıcı girişlerinde “beni hatırla” kutucukları sayesinde kullanıcı adı ve şifrenin saklanmasıdır.

Çerez tanımlamak için ad ve değer girilmesi zorunludur. Opsiyonel olarak son kullanım süresi, dizini, alan adı, güvenli seçenekleri bulunur. Kısaca açıklamak gerekirse:

Ad (Name): Zorunlu. Tanımlanacak çerezin adı.

Değer (Value): Zorunlu. Tanımlanacak çerezin değeri.

Son kulanım tarihi (Expire): Opsiyonel. Hazırlanan çerezin hangi tarihe kadar geçerli olacağını belirler. Tanımlanmamışsa tarayıcı kapanana kadar geçerli olur.

Dizin (Path): Opsiyonel. “/” ise bütün dizinlerde, “/kullanici/” ise kullanici dizini ve alt dizinlerinde geçerli olacaktır. Belirtilmemişse bulunduğu dizin olarak kabul edilir.

Alan adı (Domain): Opsiyonel. Hangi alt alanlarda geçerli olacağı belirlenir. Bütün “korayoksuztepe.com” adresinde geçerli olması isteniyorsa “.korayoksuztepe.com”, sadece “yazilim.korayoksuztepe.com”da geçerli olup diğerleri tarafından erişilememesi isteniyorsa “yazilim.korayoksuztepe.com” olarak tanımlanmalıdır.

Güvenli (Secure): Opsiyonel. Çereze erişim sadece https ile olmasını istiyorsanız true olarak belirtmeniz gerekir. Varsayılanı false olarak gelir.

Sadece http (Httponly): Opsiyonel. True olduğunda, çerezin sadece http protokolüyle erişilmesini sağlar. Javascript gibi diller aracılığıyla erişilmeye çalışıldığında görülemeyeceğinden buradan XSS’in de önüne geçilmiş oluyor.

Ne olduğunu anladığımıza göre, nasıl kullanıldığına bakalım.

setcookie('kullanici', 'korayoksuztepe', time() + 60*60);

yazarak adı kullanici, değeri korayoksuztepe olan bir çerez oluştruduk. Bunun geçerlilik süresini de 1 saat olarak ayarladık. Tarih unix timestamp olarak kaydedileceği için şimdiki tarihe saniye sayısı eklenerek ileri tarih belirlemek daha kolaylaşıyor. Bunu 60*60*24*30 şeklinde yazmak işlemi daha da kolaylaştırıyor. Tabii buradaki rakamlar şu şekilde belirleniyor: 60 (60 saniye=1 dakika) * 60 (60 dakika = 1 saat) * 24 (24 saat = 1 gün) * 30 (30 gün = 1 ay)

echo $_COOKIE["kullanici"];

yazmanız kullanici isimli çerezinizin değerini(korayoksuztepe) yazdırmak için yeterli olacaktır. Ama, çerezin henüz tanımlanmamış olma ihtimalinde sorunla karşılaşmamak için önce çerezin varlığını kontrol etmeniz gerekecektir.

$kullaniciAdi="";
if(isset($_COOKIE["kullanici"])){ //kullanici çerezi varsa
$kullaniciAdi= $_COOKIE["kullanici"]; //$kullaniciAdi değişkenine çerezin değerini ata
}else{ //kullanici çerezi yoksa
$kullaniciAdi="ziyaretçi"; // $kullaniciAdi değişkenine "ziyaretçi" değerini ata.
}

Böylece sayfa içinde
echo "Merhaba " . $kullaniciAdi;

yazdığınızda çerez varsa “Merhaba korayoksuztepe”, yoksa “Merhaba ziyaretçi” yazacaktır.

Daha önceden tanımlanan çerezi silmek için sok kullanım tarihini geçmiş bir tarih olarak belirlemek yeterli olacaktır:

setcookie('kullanici', '', time() - 1);

http://korayoksuztepe.com/dosyalar/php_cerezler/ adresinde çerez kullanımının demosuna ulaşabilirsiniz. Açtığınız gibi Çerez yazdır linkine tıkladığınızda “Merhaba ziyaretçi” yazacaktır. Çerez oluştur linkine tıkladıktan sonra çerez yazdır’a tıkladığınızda kullanıcı adı olarak korayoksuztepe çerezi bilgisayarınıza bırakıldığından ekrana “Merhaba korayoksuztepe” yazacaktır. Çerezi sil linkine tıkladıktan sonra çerez yazdır linkine tıklarsanız çerez silindiği için tekrar “Merhaba ziyaretçi” yazacaktır.

Demo’nun kaynak dosyalarını buradan indirebilirsiniz.

“PHP’de çerezler (cookies)” hakkında 2 yorum

Bir yanıt yazın