&reftitle.examples;
Temel Kullanım
Oturumlar, bireysel kullanıcılar için verileri benzersiz bir oturum
kimliğine göre depolamanın basit bir yoludur. Bu, sayfa istekleri arasında
durum bilgisini sürdürmek için kullanılabilir. Oturum kimlikleri normalde
tarayıcıya oturum çerezleri aracılığıyla gönderilir ve kimlik, mevcut
oturum verilerini almak için kullanılır. Oturum kimliği veya çerezlerinin
olmaması, PHP'nin yeni bir oturum oluşturmasını ve yeni bir oturum kimliği
üretmesini sağlar.
Oturumlar basit bir iş akışını takip eder. Bir oturum başlatıldığında,
PHP ya aktarılan kimliği (genellikle bir oturum çerezinden) kullanarak
var olan bir oturumu geri alır ya da hiçbir oturum aktarılmamışsa yeni
bir oturum oluşturur. PHP, $_SESSION süper küreselini,
oturum başladıktan sonra oturum verileriyle doldurur. PHP kapandığında,
$_SESSION süperküresel içeriğini otomatik olarak alacak,
dizileştirecek ve oturum kaydetme işleyicisini kullanarak depolanmaya
gönderecektir.
Öntanımlı olarak PHP, session.save_handler tarafından
atanan dahili dosya kaydetme işleyicisini kullanır. Bu, oturum verilerini
session.save_path yapılandırma
yönergesi tarafından belirtilen konumda sunucuya kaydeder.
Oturumlar, session_start işlevi kullanılarak
elle başlatılabilir. session.auto_start yönergesine
1 atanmışsa, istek başlatıldığında oturum
otomatik olarak başlayacaktır.
Oturumlar normalde PHP bir komut dosyasını yürütmeyi bitirdiğinde otomatik
olarak kapanır, ancak session_write_close işlevi
kullanılarak elle de kapatılabilir.
-
Bir değişkeni $_SESSION ile kayıt altına almak
]]>
- $_SESSION ile bir değişkeni tanımsız yapmak
]]>
$_SESSION dizisinin tamamını
unset($_SESSION) ile tanımsız YAPMAYIN. Bu işlem,
oturum değişkenlerinin $_SESSION süper küreseli
üzerinden kayıt altına alınmamasına sebep olacaktır.
Başka bir değişkene gönderimi tekrar tanımlı kılmanın bir yolu
olmadığından oturum değişkenlerinde gönderimleri kullanamazsınız.
Dosya tabanlı oturumlar (PHP'de öntanımlı) bir oturum bir kez
session_start veya dolaylı olarak session.auto_start aracılığıyla
açıldığında oturum dosyasını kilitler. Bir kez kilitlendiğinde, başka
hiçbir betik, session_write_close çağrılana kadar
veya ilk betik sonlanana kadar aynı oturum dosyasına erişemez.
Bu, AJAX'ı yoğun şekilde kullanan ve aynı anda birden çok istek alan http
sitelerinde büyük olasılıkla bir sorundur. Bununla başa çıkmanın en kolay
yolu, oturumda gerekli herhangi bir değişiklik yapılır yapılmaz, tercihen
betiğin başlarında, session_write_close işlevini
çağırmaktır. Bunun yerine, eşzamanlılığı destekleyen farklı bir oturum
artucu da kullanılabilir.
Oturum Kimliğinin Aktarımı
Bir oturum kimliğini yaymanın iki yolu vardır:
Çerezler
URL bağımsız değişkeni
Oturum modülü her ikisini de destekler. Çerezler en uygunudur, fakat her
zaman kullanmak mümkün olmadığından ikinci bir yöntem sağlıyoruz. İkinci
yöntem, oturum kimliğini doğrudan URL'nin içine gömer.
PHP bağlantıları şeffaf olarak dönüştürme yeteneğine sahiptir. Çalışma
anında session.use_trans_sid yönergesi etkin kılınmışsa,
göreli URI'ler otomatik olarak oturum kimliğini içerecek şekilde
değiştirilir.
arg_separator.output
&php.ini; yönergesi bağımsız değişken ayracının değiştirilebilmesini sağlar. Tam
XHTML uyumluluğu için yönergeye değer olarak & belirtin.
Ayrıca, oturum başlatıldığında tanımlanan SID sabitini
de kullanabilirsiniz. Eğer istemci uygun bir oturum çerezi göndermezse,
SID sabiti
oturum_ismi=oturum_kimliği değerini içerecektir.
Aksi takdirde sabitin değeri bir boş dizge olur. Bu durumda, oturum
kimliğini koşulsuz olarak URL'lerin içine gömebilirsiniz.
Aşağıdaki örnekte bir değişkenin nasıl oturum değişkeni haline getirildiği
ve SID sabitiyle başka bir sayfaya nasıl bağlantı
kurulduğu gösterilmiştir.
- Tek bir kullanıcının sayfa erişimlerinin sayılması
Merhaba sayın ziyaretçi, bu sayfayı
kere ziyaret ettiniz.
]]>
XSS saldırılarından kaçınmak için URL'ye SID
yerleştirilirken htmlspecialchars kullanılabilir.
SID sabitini URL'ye yukarıdaki gibi
yerleştirecekseniz, PHP'yi
--enable-trans-sid seçeneğiyle derlemeniz gerekmez.
Göreli olmayan URL'lerin harici siteleri işaret ettikleri varsayılır ve
oturum kimliğinin başka bir sunucuya ifşa edilme riskine karşı
SID bunlara yerleştirilmez.
Özel Oturum Eylemcisi
Veritabanlarını saklama alanı olarak kullanmak için veya başka bir saklama
yöntemi kullanmak için session_set_save_handler
işleviyle kullanıcı seviyesinde bir saklama işlevleri kümesi tanımlamak
gerekir.
SessionHandlerInterface arayüzü kullanılarak oturum
işleyicileri oluşturabilir veya SessionHandler
sınıfı miras alınarak PHP'nin dahili işleyicileri genişletetilebilir.
session_set_save_handler içinde belirtilen geri
çağırımlar, bir oturumun yaşam döngüsü boyunca PHP tarafından çağrılan
yöntemlerdir: open, read,
write ve close. Temizlik
görevlerinde, bir oturumu silmek için destroy
ve düzenli olarak çöpleri toplamak için gc.
Bu nedenle, PHP'ye oturum kaydetme işleyicileri daima gereklidir.
Öntanımlı işleyici, genellikle dahili dosyaları kaydetme işleyicisidir.
Özel bir kaydetme işleyicisi, session_set_save_handler
kullanılarak atanabilir. Bunun yanında, dahili kaydetme işleyicileri
sqlite, memcache ve
memcached gibi PHP eklentileri tarafından da sağlanır
ve session.save_handler ile
atanabilir.
Oturum başladığında, PHP dahili olarak oturum açma işleyicisini, ardından da
depolamaya olduğu gibi aktarılmak üzere kodlanmış bir dizge döndüren okuma
geriçağrım işlevini çağırır. Okuma geriçağırım işlevi kodlanmış dizgeyi
döndürdüğünde, PHP dizgeyi çözer ve ortaya çıkan diziyi
$_SESSION süper küreseline aktarır.
PHP kapandığında (veya session_write_close
çağrıldığında), PHP dahili olarak $_SESSION süper
küreselini kodlayacak ve bunu oturum kimliği ile birlikte yazma
geriçağrımına iletecektir. Yazma geriçağırımı bittikten sonra, PHP dahili
olarak kapatma geriçağırım işleyicisini çağırır.
Bir oturum özellikle yok edildiğinde, PHP oturum kimliğini aktararak
yoketme işleyicisini çağırır.
PHP, bir oturumun belirlenen azami yaşam süresine göre herhangi bir oturum
kaydını sona erdirmek için zaman zaman çöp toplama geriçağrımı yapar. Bu
işlev, kalıcı depolamada, belirlenen yaşam süresinden daha uzun süre
erişilen tüm kayıtları siler.