PHP Çerezler (Cookies)

Çerezler (cookies), bir sitenin bilgisayarınıza sizi daha sonra tekrar ziyaret ettiğinizde tanıyabilmek için bıraktığı küçük metin dosyalarıdır. Çerez virüs değildir; yalnızca metin içerir.

Bir çerez içinde veri genellikle isim-değer (name-value) çifti olarak saklanır. Bunun yanında çerezin kim tarafından bırakıldığı, ne zaman oluşturulduğu ve ne kadar süre geçerli olacağı gibi bilgiler de bulunabilir.

Çerezler olmadan web sunucusu ve tarayıcı etkileşimi “durum bilgisi”nden (state) yoksun kalır. Kullanıcı sayfadan sayfaya geçerken aynı kullanıcı olup olmadığını anlamak zorlaşır.

Not
Farklı tarayıcılar çerezleri farklı şekilde saklayabilir. Önemli olan, çerezin yalnızca onu bırakan alan adı (domain) kapsamında okunabilmesidir.

PHP Tarayıcıya Çerez Eklemek

PHP’de cookie gönderimi, header() mantığında olduğu gibi ekrana herhangi bir çıktı basılmadan önce yapılmalıdır.

⚠️ Önemli: setcookie() çağrısından önce echo, HTML çıktısı veya BOM/boşluk gelirse “headers already sent” hatası alırsınız.
Örnek: 1 saat geçerli cookie
<?php
// "username" isimli cookie oluştur (1 saat geçerli)
setcookie("username", "Merhaba", time() + 3600);
?>

Bu örnekte tarayıcıya username adında bir çerez gönderilir ve değeri Merhaba olur. Çerez, oluşturulduğu andan itibaren 3600 saniye (1 saat) boyunca geçerlidir.


PHP ile Çerez Okumak

PHP’de cookie değerleri $_COOKIE süper global dizisinden okunur. (Eski örneklerde $username gibi değişkenler görülebilir ama güncel kullanım $_COOKIE’dur.)

Örnek: cookie oku
<?php
// Cookie daha önce set edilmişse oku
if (isset($_COOKIE["username"])) {
    echo "username çerezinin değeri : " . $_COOKIE["username"];
} else {
    echo "username çerezi bulunamadı.";
}
?>

PHP Çerezleri Sıfırlamak / Silmek

Kullanıcı çıkış (logout) yaptığında çerez, süresi dolmadan da silinebilir. Silmek için aynı isimde cookie tekrar set edilir ve geçmiş bir zaman verilir.

Örnek: cookie sil
<?php
// Yöntem 1: geçmiş zaman vererek sil
setcookie("username", "", time() - 9999);

// (İsteğe bağlı) path kullanıyorsan aynı path ile silmelisin:
// setcookie("username", "", time() - 9999, "/");
?>
💡 İpucu: Cookie’yi kaydederken path veya domain verdiysen, silerken de aynı path/domain ile silmelisin. Aksi halde tarayıcı farklı cookie gibi algılayabilir.