Управление сессиямиСессии
&reftitle.intro;
Поддержка сессий в 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. Это правило
будет применяться независимо от того, запускалась ли сессия
функцией session_start.
&reference.session.setup;
&reference.session.constants;
&reference.session.examples;
&reference.session.upload-progress;
&reference.session.security;
&reference.session.reference;
&reference.session.sessionhandler;
&reference.session.sessionhandlerinterface;
&reference.session.sessionidinterface;
&reference.session.sessionupdatetimestamphandlerinterface;