Введение
Поддержка сессий в 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 такие ограничения отсутствуют. php_serialize доступен начиная с PHP 5.5.4.
Замечание:
При работе с сессиями обратите внимание, что запись в сессии не создается прежде чем переменная регистрируется через функцию session_register() или через добавление нового ключа в суперглобальном массиве $_SESSION. Это правило действует вне зависимости от того, была ли сессия запущена с использованием функции session_start().
Замечание:
В PHP 5.2.2 была добавлена незадокументированная возможность, позволяющая хранить сессионный файлы в каталоге "/tmp" даже если open_basedir была включена и "/tmp" не был явным образом добавлен в список разрешенных путей. Эта особенность была убрана из PHP по состоянию на PHP 5.3.0.
Коментарии
One thing that should be understood is that if you are creating a RESTfull service using sessions is by nature NOT a RESTfull process.