Bilginize:

PHP 4.1.0'dan itibaren, $_SESSION değişkeni, $_POST, $_GET, $_REQUEST ve benzerleri gibi bir küresel değişken olarak kullanılabilmektedir. $HTTP_SESSION_VARS değişkeninin aksine $_SESSION daima küreseldir. Bu bakımdan, $_SESSION için global anahtar sözcüğünü kullanmanız gerekmez. Bu belgenin her yerde $_SESSION kullanılacak biçimde değiştirilmiş oluşuna dikkat ediniz. $HTTP_SESSION_VARS değişkenini tercih ederseniz $_SESSION yerine ikame edebilirsiniz. Ayrıca şuna dikkat edin: $_SESSION değişkenini kullanmaya başlamadan önce session_start() ile oturumunuzu başlatmanız gerekir.

$_SESSION ilişkisel dizisindeki anahtarlar için PHP'de değişken isimlerine uygulanan sınırlamalar geçerlidir. Yani, bunları bir rakam ile başlatamazsınız, bir harf veya altçizgi karakteri ile başlamalıdırlar. Bu konuda daha ayrıntılı bilgi edinmek için bu kılavuzun Değişkenler bölümüne bakınız.

Eğer register_globals etkin değilse, sadece $_SESSION küresel ilişkisel dizisinin üyeleri oturum değişkeni olarak kayıt altına alınabilir. Sağlanan oturum değişkenleri sadece $_SESSION dizisinin üyeleri olarak kullanılabilir.

Güvenliği ve kodun okunabilirliğini arttırmak için $_SESSION (veya PHP 4.0.6 ve öncesi ile $HTTP_SESSION_VARS) kullanımı önerilir. $_SESSION kullanıldığı takdirde, session_register(), session_unregister(), session_is_registered() işlevlerine ihtiyaç kalmaz. Oturum değişkenlerine diğer değişkenler gibi erişilir.

Örnek 1 - Bir değişkeni $_SESSION ile kayıt altına almak

<?php
session_start
();
// PHP 4.0.6 ve öncesi ile $HTTP_SESSION_VARS kullanın
if (!isset($_SESSION['count'])) {
  
$_SESSION['count'] = 0;
} else {
  
$_SESSION['count']++;
}
?>

Örnek 2 - register_globals etkin değilken $_SESSION ile bir değişkeni tanımsız yapmak

<?php
session_start
();
// PHP 4.0.6 ve öncesi ile $HTTP_SESSION_VARS kullanın
unset($_SESSION['count']);
?>

Dikkat

$_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.

Uyarı

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.

Eğer register_globals etkinse, her küresel değişken bir oturum değişkeni olarak kayıt altına alınabilir. Bir oturumun yeniden başlatılması ile bu değişkenler ilgili küresel değişkenlere geri yerleştirilecektir. PHP'nin hangi değişkenlerin oturum değişkeni olarak kaydedildiğini bilmesi gerektiğinden değişkenlerin session_register() işlevi ile kayıt altına alınması gerekir. Bundan kaçınmak için girdilere $_SESSION içinde değer atamanız yeterlidir.

Dikkat

PHP 4.3.0 öncesinde, $_SESSION kullanıyorsanız ve register_globals etkin değilse, session_register(), session_is_registered() ve session_unregister() işlevlerini kullanmayın. Güvenliği ve başarımı arttırmak için register_globals yönergesine daima Off değerini atayın.

register_globals etkinse, küresel değişkenler ve $_SESSION girdileri, özdevinimli olarak önceki oturumda kayıt altına alınmış değerlere gönderimli olurlar. Ancak, register_globals iptal edilip, değişken sadece $_SESSION tarafından kayıt altına alınmışsa küresel değişken sadece bir sonraki isteğe kadar geçerli kalacaktır.

PHP 4.2.3 ve öncesinde bir kusur vardır. Eğer yeni bir oturum değişkenini session_register() kullanarak kayıt altına alırsanız, küresel etki alanındaki girdi ve $_SESSION girdisi sonraki session_start() çağrısına kadar aynı değere gönderimli olmayacaklardır. Yani, session_register() ile kayıt altına alınmış küresel değişkende bir değişiklik yaparsanız $_SESSION girdisi bu değişikliği yansıtmayacaktır. Bu durum PHP 4.3.0'da da geçerlidir.