PHP Çerez (Cookie) Kullanımı

PHP Çerezlerin (Cookies) Kullanımı

Çerezler, web sunucusundan gelen bir verinin kullanıcının bilgisayarına kaydedilmesini sağlar. Her türlü alfanümerik bilgi boyutu 4kb’ı geçmemek üzere kaydedilebilir. Kaydedilen çerezler bilgisayardan alınıp tekrar sunucuya gönderilerek kullanılabilir.

Sıklıkla kullanıldığı alanlara oturum bilgileri (session), alışveriş sepeti içerikleri, giriş bilgileri örnek verilebilir. Çerezlerin güvenlik konusunda önemli bir özelliği bulunur. Bir çerez sadece onu kaydeden site (domain) tarafından okunabilir. Bir başka deyişle örneğin phpders.org adresinden kaydedilen bir çerez sadece bu adresteki sunucu tarafından okunabilir. Yetkisi bulunmayan diğer web sitelerinin bu bilgilere erişmesini önler.

Bir de üçüncü kişiler (third-party) tarafından eklenen çerezler bulunur. Genellikle reklam hizmeti veren şirketler tarafından kullanıcıları izlemek için kullanılırlar.

Önemli bir ayrıntıya dikkat çekelim. Çerezler HTML sayfa gönderilmeden önce atanır. Bir başka deyişle herhangi bir HTML elementi ekrana yazdırıldıktan sonra çerez atanması mümkün değildir.

Çerez Oluşturma (Set Cookie)

Herhangi bir HTML etiketi ekrana yazdırılmadan önce setcookie fonksiyonunu kullanarak basit bir şekilde çerez oluşturabiliriz. Syntax aşağıdaki gibi olur.

  • isim: Çereze verdiğimiz isimdir. Bir sonraki tarayıcı isteğinde sunucu bu isme sahip çerezi kullanabilir.
  • değer: 4kb boyutunu geçmemek şartıyla herhangi bir alfanümerik içerik atanabilir. İçeriği belirtir.
  • bitiş: Unix timestamp ile bitiş zamanı ayarlamayı sağlar. Kullanımı zorunlu değildir. Genellikle time() fonksiyonuna eklenen saniye değeri ile birlikte kullanılır. Eğer değer verilmezse tarayıcı kapandığında çerezin süresi biter.
  • yolSunucudaki hangi yola atanacağını belirler. Eğer sadece (slash) işareti kullanılırsa tüm alan adında geçerli olur. Eğer bir alt klasör tanımlanmış ise çerez sadece alt klasör için geçerli olur. Kullanımı zorunlu değildir.
  • domain: Alan adını belirler. Eğer tüm alan adı kullanılırsa alt alan adları da (subdomain) çerezi kullanabilir. Fakat sadece bir alt alan adı için çerez tanımlanırsa kendi içerisinde geçerli olur. Zorunlu değildir.
  • güvenlik: HTTPS protokolü ile güvenli bağlantı yapılıp yapılmayacağına karar verir. TRUE ile güvenli bağlantı kurar. Zorunlu değildir.
  • sadecehttp: Çerezin HTTP protokolünü kullanmasını zorunlu kılar. Bu durumda Javascript gibi script dilleri çereze erişemez. Tüm tarayıcılar tarafından desteklenmemektedir. Kullanımı zorunlu değildir.

Tüm bu teorik bilgileri pratiğe dökelim. Kullanıcı adını bir hafta süreyle tüm alan adında saklayan bir çerez oluşturalım.

İsim olarak belirlediğimiz kullaniciadi ile çereze erişebilir ve kullanabiliriz. ornek ifadesi atanan değeri temsil etmektedir. Süre olarak şu anki zamandan bir hafta sonrasını verdik. Bu da çerezin bir hafta süreyle tarayıcının ön belleğinde saklanacağı anlamına gelir. En son olarak ise tüm alan adında geçerli olması için / (slash) ifadesini kullandık.

Çerezlere Erişim

Çerezlerin değerini okumak için $_COOKIE dizisini kullanarak basitçe erişim sağlayabiliriz. Örneğin tarayıcıda kullanıcı adı bilgilerinin saklandığı bir çerez olup olmadığını kontrol edip, eğer varsa bu değeri okumak için aşağıdaki yöntemi kullanabiliriz.

Yukarıdaki örnekte önce çerez olup olmadığını kontrol ettik. Ardından var olan değeri kullanici değişkenine atadık.

Bir önemli ayrıntıya daha dikkat etmelisiniz. Bir çerez değerini okumak için bu değerin tarayıcıya gönderilmesi gerekir. Yani atanan çerez tarayıcı sayfası yenilenene kadar erişilemez.

Çerezi Yok Etmek (Destroy)

Bir çerezi silmek için geçmiş tarihli bir atama yapmamız gerekiyor. Silme işlemi için yeni atanacak çerezin tüm parametrelerinin (zaman değeri dışında) önceki ile aynı olması gerekir. Çok küçük istisnalarda kullanıcının bilgisayarında tarih farklı ayarda olabilir. Bu gibi durumlar için geçmiş zamanı geniş tutmak bizi bu küçük sorundan kurtarır. Örnekte bir ay öncesine süre verilmiştir.

 

 

Yorum Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

error: