Пользовательские обработчики сессии

Для реализации хранилища данных (или любого иного хранилища) следует использовать session_set_save_handler(), чтобы создать набор пользовательских функций хранилища. Обработчики сессий можно создать, используя класс SessionHandlerInterface, или расширить внутренние обработчики PHP, унаследовав класс SessionHandler.

Функции обратного вызова, указанные в session_set_save_handler(), являются методами, вызываемыми PHP в течение жизненного цикла сессии: open, read, write и close и для служебных задач: destroy для удаления сессии и gc для периодической сборки мусора.

Следовательно, в PHP всегда необходимы обработчики, сохраняющие сессии. По умолчанию работает внутренний обработчик 'files', сохраняющий сессии в файлы. Пользовательский обработчик может быть установлен, используя функцию session_set_save_handler(). Альтернативные обработчики для сохранения сессии также доступны в модулях PHP, таких как sqlite, memcache и memcached и могут быть установлены с помощью session.save_handler.

Когда стартует сессия, PHP внутренне вызовет обработчик open с последующим вызовом обработчика read, который должен вернуть закодированную строку - в точности такую, какая передавалась для сохранения. После возвращения обработчиком read закодированной строки, PHP декодирует её и заполнит получившимся массивом суперглобальный массив $_SESSION.

Когда PHP завершает исполнение скрипта (или когда вызвана функция session_write_close()), PHP внутренне закодирует суперглобальный массив $_SESSION, и передаст эти данные с идентификатором сессии функции обратного вызова write. После того, как отработает функция обратного вызова write, PHP внутренне вызовет обработчик функции обратного вызова close.

Когда сессия специально уничтожена, PHP вызовет обработчик destroy с идентификатором сессии.

PHP будет вызывать обработчик функции обратного вызова gc время от времени, чтобы пометить сессии как истёкшие в соответствии с временем жизни сессий. Эта операция удалит все записи из постоянного хранилища, доступ к которым не осуществлялся более чем интервал времени, указанный в параметре $lifetime.

add a note add a note

User Contributed Notes 1 note

up
-17
tony at marston-home dot demon dot co dot uk
5 years ago
Your custom session handler should not contain calls to any of the session functions, such as session_name() or session_id(), as the relevant values are passed as arguments on various handler methods. Attempting to obtain values from alternative sources may not work as expected.
To Top