Введение

Поддержка сессий в PHP заключается в способе сохранения некоторых данных между несколькими последовательными доступами.

Каждому посетителю сайта присваивается уникальный идентификатор, называемый идентификатором сессии (session id). Он хранится либо в cookie на стороне пользователя, либо передается через URL.

Поддержка сессий позволяет сохранять данные между запросами в суперглобальном массиве $_SESSION. В тот момент, когда посетитель получает доступ к сайту, PHP проверяет автоматически (если session.auto_start установлено в 1) или по запросу (явным образом через вызов session_start()), был ли определенный идентификатор сессии послан вместе с запросом. Если это так, восстанавливается сохраненное ранее окружение.

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

При включенном session.auto_start единственным способом помещения объектов в сессию останется загрузка описаний класса с помощью auto_prepend_file. В противном случае придется выполнить сериализацию (serialize()) и десериализацию (unserialize()) объекта вручную.

$_SESSION (и все зарегистрированныее переменные) сериализуются внутри PHP после выполнения запроса, используя обработчик сериализации, указанный в INI-опции session.serialize_handler. Зарегистрированные, но неопределенные переменные помечаются как неопределенные. При последующем доступе они не определяются сессионным модулем, если пользователь заново не определит их.

Внимание

Так как сессионные данные сериализуются, то переменные с типом resource не могут храниться в сессиях.

Обработчики сериализации (php и php_binary) наследуют ограничения для register_globals. Поэтому нельзя использовать числовые или строковые индексы содержащие специальные символы (| и !). Их использование приведет к ошибкам по завершении скрипта. У php_serialize такие ограничения отсутствуют.

Замечание:

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