Ziyaretçi bilgisayarında, ziyaretçiyi takip edebilmek için bilgisayarında siteyle ilgili çerez dediğimiz küçük veriler saklanabilir. Böylece sitemize giren kullanıcı pazarlama, üyelik girişi sırasında kullanıcı adının tanınması veya otomatik sisteme giriş yapılması gibi olanaklar mümkün hale gelir.
Çerezler, yalnızca oluşturuldukları web sitesi geçerli olurlar. Çerezin geçersiz duruma geleceği bir tarih bilgisi tanımlanır. Böylece henüz sisteme giriş yapmamış kullanıcının sepet eklediği ürünlerin 1 hafta daha sepette tutulması, şifresiz girişin 1 ay süreyle kullanılmaya devam edilmesi gibi işlevler gerçekleştirilir. Oluşturulan her bir çerez, yalnızca kullanılan tarayıcıda geçerlidir.
Cookie’ler ziyaretçinin (diğer bir deyişle istemci) bilgisayarında saklanır. Öneğin Chrome ile “beni hatırla” seçeneği işaretlenerek doldurulmuş bir üye girişi formu ile Chrome tarayıcısı kullanıldığında şifre yazma zorunluluğu ortadan kalkacak ancak Firefox ile girildiğinde kullanıcının tanınma işlemi gerçekleştirilmeyecektir.
PHP’de cookie oluştururken dikkat edilmesi gereken şey, oluşturulan cookie’nin <html> etiketinden önce yerleştirilmesidir.
PHP’de Cookie Oluşturma
PHP’de çerez (cookie) oluşturabilmek için setcookie() fonksiyonu kullanılır. Fonksiyon sırasıyla çerez değişkeninin adı, değeri, son geçerlilik süresi, etkili olacağı alan olmak üzere parametreler alabilir.
1 2 3 | <?php setcookie("çerez adı", "değer", "bitiş zamanı", "geçerlilik konumu", "alan adı"); ?> |
Genel kullanımı yukarıdaki gibi olan cookie’nin çerez adı ve değeri dışındaki parametreler yazılmasa da çalışmaktadır. Eğer bitiş zamanı yazılmazsa, tarayıcı kapatılana kadar geçerli olmaya devam edecektir.
Geçerlilik süresini ifade ederken mevcut zamanın üzerine istenildiği kadar saniye cinsinden değer eklenerek hesaplanır. Mevcut zamanı saniye cinsinden hesaplamak için time() fonksiyonu kullanılır.
Kullanıcı adı bilgisini $kullanici_adi isimli değişkenden alıp bunu 1 saat süre tutan cookie komutu aşağıdaki gibidir:
1 2 3 | <?php setcookie("kullanici_adi", $kullanici_adi, time()+60*60 ); ?> |
Kullanıcı adı bilgisini $kullanici_adi isimli değişkenden alıp bunu 1 ay süre tutan cookie komutu aşağıdaki gibidir:
1 2 3 | <?php setcookie("kullanici_adi", $kullanici_adi, time()+60*60*24*30 ); ?> |
Dikkat edilirse 1 saatin kaç saniye olduğu bilgisi, 60*60 ile bulunabiliyor. Dolayısıyla saat, gün, ay, yıl gibi birimlere çeviri yapmak için ilgili zaman dilimini çarpma işlemine sokmak yeterlidir.
- time() + 60: 60 saniye = 1 dakika
- time() + 60*60: 60 dakika = 1 saat
- time() + 60*60*24: 24 saat = 1 gün
- time() + 60*60*24*5: 5 gün
- time() + 60*60*24*7: 7 gün = 1 hafta
- time() + 60*60*24*30: 30 gün = 1 ay
- time() + 60*60*24*365: 365 gün = 1 yıl
Eğer oluşturulan cookie’nin yalnızca belirli klasörler altında geçerli olması isteniyorsa “geçerlilik konumu” kısmında bu belirtilir. Kullanıcı adı bilgisini $kullanici_adi isimli değişkenden alıp bunu 1 ay süre tutan cookie, yalnızca web-tasarim klasörü altında geçerli olacaksa bu komut aşağıdaki gibidir:
1 2 3 | <?php setcookie("kullanici_adi", $kullanici_adi, time()+60*60*24*30, "/web-tasarim/"); ?> |
Yukarıdaki tanımlanan cookie teknikakil.com/web-tasarim/ içinde ve altındaki tüm klasörlerde geçerli olur.
Eğer bir klasör için tanımlı cookie’nin tüm alan adı için geçerli olmasını istersen cookie’yi aşağıdaki şekilde yeniden tanımlayabiliriz:
1 2 3 | <?php setcookie("kullanici_adi", $kullanici_adi, time()+60*60*24*30, "/"); ?> |
Eğer cookie’nin tüm alt alan adlarında geçerli olması isteniyorsa;
1 2 3 | <?php setcookie("kullanici_adi", $kullanici_adi, time()+60*60*24*30, "/", "teknikakil.com"); ?> |
Eğer cookie’nin yalnızca belirli bir alt alan adında, mesela yalnızca deneme.teknikakil.com üzerinde etkili olması isteniyorsa aşağıdaki cookie komutu kullanılır:
1 2 3 | <?php setcookie("kullanici_adi", $kullanici_adi, time()+60*60*24*30, "/", "deneme.teknikakil.com"); ?> |
Cookie’den Değer Okuma
PHP’de cookie’den değer okuyabilmek için $_COOKIE global değişkeni kullanılır.
1 2 3 4 5 6 7 | <?php if (isset($_COOKIE['kullanici_adi'])) { echo $_COOKIE['kullanici_adi']; } ?> |
Cookie’yi Silme / Geçersiz Hale Getirme
PHP’de bir cookie’yi silmenin yolu, bu cookie’nin geçerlilik süresini değiştirmektir. Mevcut zamandan 1 saniye öncesinin bitiş süresi olarak ayarlanması, bu cookie’nin geçerliliği kaldırır.
1 2 3 | <?php setcookie("kullanici_adi", "", time() - 1); ?> |
Bu durumda cookie’ye değer verme zorunluluğu yoktur. Silinmek istenen cookie değişkeninin (“kullanici_adi”) doğru yazılması yeterlidir.
Cookie ile İlgili Önemli Noktalar
- Cookie’de şifre gibi kritik bilgiler tutulmaz. Cookie istemci, yani ziyaretçinin bilgisayarında saklandığı için ziyaretçinin bu veriyi değiştirme ihtimalinin bulunduğu her zaman göz önünde bulundurulmalıdır.
- Bir site, başka bir site için oluşturulan cookie’lere ulaşamaz.
- Geçerlilik süresi sonra ermiş bir cookie’ye ulaşılamaz.
- Cookie’ler tarayıcıya özgü olarak oluşur.
- Cookie ayarlandığı anda aynı sayfada gösterilmez. Bu bir sorun olarak görünse de gösterilmesi için sayfanın sayfanın yenilenmesi gerekir.