Введение

Поддержка сессий в 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().

add a note add a note

User Contributed Notes 1 note

up
12
ryan dot jentzsch at gmail dot com
9 years ago
One thing that should be understood is that if you are creating a RESTfull service using sessions is by nature NOT a RESTfull process.
To Top