Basic usage

Замечание:

По состоянию на PHP 4.1.0, $_SESSION доступна в качестве глобальной переменной так же, как доступны $_POST, $_GET, $_REQUEST и прочие. В отличие от $HTTP_SESSION_VARS переменная $_SESSION всегда глобальна. Таким образом, нет необходимости в использовании ключевого слова global для $_SESSION. Обратите внимание, данная документация была изменена для повсеместного использования $_SESSION. Если вы предпочитаете старый стиль, можете использовать также $HTTP_SESSION_VARS вместо $_SESSION. Следует также отметить, что для доступа к $_SESSION необходимо предварительно выполнить session_start().

Имена ключей ассоциативного массива $_SESSION подчиняются тем же ограничениям, что и обычные имена переменных PHP. Например, они не могут начинаться с цифры и должны начинаться с буквы или знака нижнего подчеркивания. Для дополнительных деталей смотрите раздел о переменных данного руководства.

Если register_globals выключена, только члены глобального ассоциативного массива $_SESSION могут быть зарегистрированы в качестве сессионной переменной. Переменные восстановленной сессии могут быть доступны только в массиве $_SESSION.

Использование $_SESSION (или $HTTP_SESSION_VARS в PHP 4.0.6 и младше) рекомендуется для увеличения безопасности и повышения читаемости кода. При использовании $_SESSION нет необходимости в использовании функций session_register(), session_unregister() и session_is_registered(). Сессионные переменные доступны как и все прочие переменные.

Пример #1 Регистрация переменную с помощью $_SESSION.

<?php
session_start
();
// Используем $HTTP_SESSION_VARS в PHP 4.0.6 или более ранних
if (!isset($_SESSION['count'])) {
  
$_SESSION['count'] = 0;
} else {
  
$_SESSION['count']++;
}
?>

Пример #2 Дерегистрация переменной с помощью $_SESSION при выключенной register_globals.

<?php
session_start
();
// Используем $HTTP_SESSION_VARS в PHP 4.0.6 или более ранних
unset($_SESSION['count']);
?>

Предостережение

НЕ ОЧИЩАЙТЕ $_SESSION целиком, испольуя unset($_SESSION), так как это отключит возможность регистрации сессионных переменных через суперглобальную переменную $_SESSION.

Внимание

Вы не можете использовать ссылки в сессионных переменных, так как не существует реального способа восстановления ссылки к другой переменной.

Если register_globals включена, то любая глобальная переменная может быть зарегистрирована в качестве сессионной. При перезапуске сессии эти переменные будут восстановлены в соответствующие им глобальные переменные. Ввиду того, что PHP должен знать, какие именно глобальные переменные зарегистрированы в качестве сессионных, пользователям следует регистрировать переменные с использованием функции session_register(). Этого можно избежать при использовании только $_SESSION.

Предостережение

В версии PHP 4.3.0 и более ранних при использовании $_SESSION и выключенной register_globals, не пользуйтесь session_register(), session_is_registered() или session_unregister(). Рекомендуется выключить register_globals с точки зрения безопасности и производительности.

Если register_globals включена, то глобальные переменные и записи в $_SESSION будут автоматически ссылаться на одни и те же значения, которые были зарегистрированы в предыдущем экземпляре сессии. Тем не менее, если переменная зарегистрирована в $_SESSION, то глобальная переменная будет доступна начиная со следующего запроса.

В версии PHP 4.2.3 и более ранних присутствует дефект. Если зарегистрировать новую сессионную переменную, используя session_register(), то переменная в глобальной области и запись в $_SESSION не будут ссылаться на одно и то же значение до тех пор, пока не будет выполнен следующий session_start(). Это значит, что изменение вновь зарегистрированной глобальной переменной не будет отражено в $_SESSION. Это поведение было исправлено в PHP 4.3.0.


Участник рейтинга Тэглайн 2010