Örnekle PHP Oturumu ve PHP Çerezleri
Çerez Nedir?
Çerez, web sunucusunun istemci bilgisayarda sakladığı maksimum 4KB boyutunda küçük bir dosyadır.
Bir çerez ayarlandıktan sonra, takip eden tüm sayfa istekleri çerez adını ve değerini döndürür.
Bir çerez yalnızca verildiği alan adından okunabilir. Örneğin, alan adını kullanan bir çerez seti www.guru99.com etki alanından okunamıyor kariyer.guru99.com.
İnternet'teki web sitelerinin çoğu, reklamcılık gibi diğer alanlardan öğeler görüntüler. Bu unsurları sunan alan adları da kendi çerezlerini ayarlayabilir. Bunlar üçüncü taraf çerezleri olarak bilinir.
Bir kullanıcı tarafından oluşturulan çerez yalnızca kendisi tarafından görülebilir. Diğer kullanıcılar değerini göremez.
Çoğu web tarayıcısında çerezleri, üçüncü taraf çerezlerini veya her ikisini birden devre dışı bırakma seçenekleri bulunur.
Bu durumda PHP, URL'deki çerez belirtecini ileterek yanıt verir.
Aşağıda gösterilen şema çerezlerin nasıl çalıştığını göstermektedir.
Burada,
1) Bir kullanıcı, çerezleri saklayan bir sayfa talep eder
2) Sunucu, çerezi kullanıcının bilgisayarına yerleştirir
3) Kullanıcıdan gelen diğer sayfa istekleri çerez adını ve değerini döndürecektir
Çerezleri neden ve ne zaman kullanmalı?
- Http durum bilgisi olmayan bir protokoldür; çerezler, kullanıcının bilgisayarında saklanan küçük dosyaları kullanarak uygulamanın durumunu izlememize olanak tanır. Çerezlerin saklandığı yol, tarayıcıya bağlıdır. Internet Explorer bunları genellikle Temporal Internet Files klasöründe saklar.
- Kullanıcı deneyiminin kişiselleştirilmesi – Bu, kullanıcıların tercihlerini seçmelerine izin verilerek gerçekleştirilir. İstenen sayfa, çerezlerde ayarlanan tercihlere göre kişiselleştirilir.
- Bir kullanıcının ziyaret ettiği sayfaları izleme
Çerez Oluşturma
Şimdi çerez oluşturmak için kullanılan temel sözdizimine bakalım.
<?php setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]); ?>
İŞTE,
- Php “setcookie” PHP işlevi çerezi oluşturmak için kullanılır.
- “cookie_name”, sunucunun $_COOKIE dizi değişkeninden değerini alırken kullanacağı çerezin adıdır. Zorunlu.
- “cookie_value” çerezin değeridir ve zorunludur
- "[expiry_time]" isteğe bağlıdır; Çerezin son kullanma süresini 1 saat gibi ayarlamak için kullanılabilir. Zaman, PHP time() işlevleri artı veya eksi 0'dan büyük saniye sayısı kullanılarak ayarlanır, yani 3600 saat için time() + 1.
- “[çerez_yolu]” isteğe bağlıdır; sunucudaki çerez yolunu ayarlamak için kullanılabilir. Eğik çizgi "/", çerezin alan adının tamamında kullanıma sunulacağı anlamına gelir. Alt dizinler, alt alan adına çerez erişimini sınırlar.
- “[domain]” isteğe bağlıdır; çerez erişim hiyerarşisini tanımlamak için kullanılabilir;
www.cookiedomain.com
tüm alan adı anlamına gelirkenwww.sub.cookiedomain.com
çerez erişimini sınırlarwww.sub.cookiedomain.com
ve alt alan adları. Toplam karakterler 253 karakteri geçmediği sürece bir alt alan adına ait bir alt alan adına sahip olmanın mümkün olduğunu unutmayın. - “[güvenli]” isteğe bağlıdır, varsayılan yanlıştır. Çerezin true olarak ayarlanmışsa https üzerinden, false olarak ayarlanmışsa http üzerinden gönderilip gönderilmediğini belirlemek için kullanılır.
- “[Httponly]” isteğe bağlıdır. True olarak ayarlanırsa yalnızca istemci tarafı kodlama dilleri, yani JavaSenaryo bunlara erişilemiyor.
Not: php set cookie işlevi HTML açılış etiketinden önce yürütülmelidir.
Şimdi çerezlerin kullanıldığı bir örneğe bakalım.
Kullanıcı adını on saniye sonra sona eren bir çerezde saklamamıza olanak tanıyan temel bir program oluşturacağız.
Aşağıdaki kod yukarıdaki “cookies.php” örneğinin uygulanmasını göstermektedir.
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
Çıktı:
the cookie has been set for 60 seconds
Çerez değerini alma
Aşağıdaki kodla “cookies_read.php” adında başka bir dosya oluşturun.
<?php print_r($_COOKIE); //output the contents of the cookie array variable ?>
Çıktı:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
Not: $_COOKIE, PHP'de yerleşik süper global bir değişkendir.
Ayarlanan tüm çerezlerin adlarını ve değerlerini içerir.
Değerlerin sayısı
$_COOKIE dizisinin içerebileceği php.ini'de ayarlanan bellek boyutuna bağlıdır.
Varsayılan değer 1 GB'tır.
Uygulamamızı test ediyoruz.
PHP dosyalarınızı phptus klasörüne kaydettiğinizi varsayalım.
- Adım 1 – web tarayıcınızı açın ve URL’yi girin http://localhost/phptuts/cookies_read.php
Not: Yalnızca boş bir dizi görüntülendi
- Adım 2 – Tarayıcıdan URL'ye gidin http://localhost/phptuts/cookies.php
- Adım 3 – İlk sekmeye geri dönün ve ardından yenile düğmesine tıklayın
Bir dakika bekleyin ve ardından yenileme düğmesine tekrar tıklayın. Hangi sonuçları aldınız?
Çerezleri sil
- Bir çerezi son kullanma tarihinden önce yok etmek istiyorsanız, son kullanma süresini zaten geçmiş bir süreye ayarlarsınız.
- Aşağıdaki kodla cookie_destroy.php adında yeni bir alan oluşturun
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- Çerez değerlerinin alınmasıyla ilgili yukarıdaki bölümdeki 1'den 3'e kadar olan adımları tekrarlayın.
- URL'yi aç http://localhost/phptuts/cookie_destroy.php
- URL'ye geç http://localhost/phptuts/cookies_read.php hangi sonuçları gösteriyor?
Oturum nedir?
- Oturum, sunucuda depolanan genel bir değişkendir.
- Her oturuma, saklanan değerleri almak için kullanılan benzersiz bir kimlik atanır.
- Bir oturum oluşturulduğunda, benzersiz oturum kimliğini içeren bir çerez kullanıcının bilgisayarında depolanır ve sunucuya yapılan her istekte geri gönderilir. İstemci tarayıcısı çerezleri desteklemiyorsa, URL'de benzersiz php oturum kimliği görüntülenir
- Oturumlar, çerezlere kıyasla nispeten büyük verileri saklama kapasitesine sahiptir.
- Tarayıcı kapatıldığında oturum değerleri otomatik olarak silinir. Değerleri kalıcı olarak saklamak istiyorsanız bunları veritabanında saklamalısınız.
- Tıpkı $_COOKIE dizi değişkeni gibi, oturum değişkenleri de $_SESSION dizi değişkeninde saklanır. Çerezlerde olduğu gibi oturumun herhangi bir HTML etiketinden önce başlatılması gerekir.
Sessions neden ve ne zaman kullanılmalı?
- Kullanıcı kimliği gibi önemli bilgileri, kötü niyetli kullanıcıların müdahale edemeyeceği sunucuda daha güvenli bir şekilde saklamak istiyorsunuz.
- Değerleri bir sayfadan diğerine aktarmak istiyorsunuz.
- Çerezleri desteklemeyen tarayıcılarda çerezlere alternatif istiyorsunuz.
- Genel değişkenleri URL'de iletmekle karşılaştırıldığında daha verimli ve daha güvenli bir şekilde depolamak istiyorsunuz
- 4 KB'tan daha büyük kapasiteye sahip, bilgileri geçici olarak depolamak zorunda olan alışveriş sepeti gibi bir uygulama geliştiriyorsunuz.
Oturum Oluşturma
Bir oturum oluşturmak için önce PHP session_start işlevini çağırmanız ve ardından değerlerinizi $_SESSION dizi değişkeninde saklamanız gerekir.
Bir sayfanın kaç kez yüklendiğini bilmek istediğimizi varsayalım, bunu yapmak için bir oturum kullanabiliriz.
Aşağıdaki kod oturumlardan nasıl değer oluşturulacağını ve alınacağını gösterir
<?php session_start(); //start the PHP_session function if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
Çıktı:
You are visitor number 1
Oturum Değişkenlerini Yok Etme
session_destroy() işlevi tüm Php oturum değişkenlerini yok etmek için kullanılır.
Yalnızca bir oturumun tek bir öğesini yok etmek istiyorsanız unset() işlevini kullanırsınız.
Aşağıdaki kod her iki yöntemin de nasıl kullanılacağını göstermektedir.
<?php session_destroy(); //destroy entire session ?>
<?php unset($_SESSION['product']); //destroy product session item ?>
Session_destroy, oturumla ilişkili çerezler de dahil olmak üzere tüm oturum verilerini kaldırır.
Ayarlanmadığında yalnızca bireysel oturum değişkenleri serbest bırakılır.
Diğer veriler bozulmadan kalır.
ÖZET
- Çerezler kullanıcının bilgisayarına kaydedilen küçük dosyalardır
- Çerezler yalnızca veren alan adından okunabilir
- Çerezlerin bir geçerlilik süresi olabilir, ayarlanmadığı takdirde tarayıcı kapatıldığında çerezin süresi dolar
- Oturumlar sunucuda saklanan global değişkenler gibidir
- Her oturuma, bir kullanıcının değişkenlerini izlemek için kullanılan benzersiz bir kimlik kimliği verilir.
- Tarayıcıya herhangi bir HTML etiketi gönderilmeden önce hem çerezlerin hem de oturumların başlatılması gerekir.