# Управление сессиями

# Введение

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

- Установка и настройка
  - Требования
  - Установка
  - Настройка во время выполнения
- Предопределённые константы
- Примеры
  - Основы использования
  - Передача идентификатора сессии
  - Пользовательские обработчики сессии
- Отслеживание хода загрузки файлов через сессии
- Безопасность сессий
  - Базовые принципы управления сессиями
  - INI-настройки безопасности сессий
- Функции для работы с сессиями
  - session_abort — Отменяет изменения в массиве сессии и завершает её
  - session_cache_expire — Получает и (или) устанавливает срок действия текущего кеша
  - session_cache_limiter — Получает и (или) устанавливает текущий ограничитель кеша
  - session_commit — Псевдоним session_write_close
  - session_create_id — Создаёт новый идентификатор сессии
  - session_decode — Декодирует данные сессии из закодированной строки сессии
  - session_destroy — Уничтожает зарегистрированные данные сессии
  - session_encode — Кодирует данные текущей сессии в формате строки сессии
  - session_gc — Собирает мусорные данные сессии
  - session_get_cookie_params — Возвращает параметры cookie сессии
  - session_id — Получает и (или) устанавливает идентификатор текущей сессии
  - session_module_name — Возвращает и (или) устанавливает модуль текущей сессии
  - session_name — Получает и (или) устанавливает название текущей сессии
  - session_regenerate_id — Генерирует и обновляет идентификатор текущей сессии
  - session_register_shutdown — Регистрирует функцию завершения сессии
  - session_reset — Реинициализирует сессию оригинальными значениями
  - session_save_path — Получает и (или) устанавливает путь сохранения текущей сессии
  - session_set_cookie_params — Устанавливает параметры cookie для сессии
  - session_set_save_handler — Устанавливает пользовательские обработчики хранения сессии
  - session_start — Начинает или возобновляет сессию
  - session_status — Возвращает состояние текущей сессии
  - session_unset — Освобождает переменные сессии
  - session_write_close — Записывает данные сессии и завершает её
- SessionHandler — Класс SessionHandler
  - SessionHandler::close — Закрывает сессию
  - SessionHandler::create_sid — Возвращает новый идентификатор сессии
  - SessionHandler::destroy — Уничтожает сессию
  - SessionHandler::gc — Очищает старые сессии
  - SessionHandler::open — Инициализирует сессию
  - SessionHandler::read — Считывает данные сессии
  - SessionHandler::write — Записывает данные сессии
- SessionHandlerInterface — Класс SessionHandlerInterface
  - SessionHandlerInterface::close — Закрывает сессию
  - SessionHandlerInterface::destroy — Уничтожает сессию
  - SessionHandlerInterface::gc — Очищает старые сессии
  - SessionHandlerInterface::open — Инициализирует сессию
  - SessionHandlerInterface::read — Читает данные сессии
  - SessionHandlerInterface::write — Записать данные сессии
- SessionIdInterface — Интерфейс SessionIdInterface
  - SessionIdInterface::create_sid — Создать идентификатор сессии
- SessionUpdateTimestampHandlerInterface — Интерфейс SessionUpdateTimestampHandlerInterface
  - SessionUpdateTimestampHandlerInterface::updateTimestamp — Обновить метку времени
  - SessionUpdateTimestampHandlerInterface::validateId — Проверить идентификатор

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open