One thing that should be understood is that if you are creating a RESTfull service using sessions is by nature NOT a RESTfull process.
Поддержка сессий в 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().
One thing that should be understood is that if you are creating a RESTfull service using sessions is by nature NOT a RESTfull process.