session_set_save_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

session_set_save_handler - Встановлює користувальницькі обробники зберігання сесії

Опис

session_set_save_handler(    callable $open,    callable $close,    callable $read,    callable $write,    callable $destroy,    callable $gc,    callable $create_sid = ?,    callable $validate_sid = ?,    callable $update_timestamp = ?): bool

Також можна зареєструвати наступний прототип:

session_set_save_handler(object $sessionhandler, bool $register_shutdown = true): bool

session_set_save_handler() встановлює користувальницькі обробники зберігання сесії, які використовуються для збереження та отримання даних, пов'язаних із сесією. Це особливо корисно, коли доцільним є метод зберігання, відмінний від тих, які надаються сесіями PHP, наприклад, зберігання даних сесії в локальній базі даних.

Список параметрів

Ця функція має два визначення (прототипу).

sessionhandler

Примірник класу, що реалізує інтерфейс SessionHandlerInterface та необов'язкові SessionIdInterfaceи/илиSessionUpdateTimestampHandlerInterface, такий як SessionHandler, Для реєстрації як оброблювач сесії.

register_shutdown

Зареєструвати session_write_close() як функцію register_shutdown_function()

або

open

Callback-функція з наступною сигнатурою:

open(string $savePath, string $sessionName): bool

Callback-функцияopen працює як конструктор у класах та виконується при відкритті сесії. Це перша callback-функція, яка виконується, коли сесія стартує автоматично або вручну через session_start()Возвращаемое значение**true** у разі успішного виконання, **false**в случае неудачи.

close

Callback-функція з наступною сигнатурою:

close(): bool

Callback-функцияclose працює як деструктор у класах і виконується після того, як була викликана callback-функція write. Вона також викликається під час виклику session_write_close(). Значення, що повертається, має бути true у разі успішного виконання, **false**в случае неудачи.

read

Callback-функція з наступною сигнатурою:

read(string $sessionId): string

Callback-функцияread повинна завжди повертати кодований (серіалізований) рядок сесії або порожній рядок, якщо немає даних для читання.

Ця callback-функція викликається внутрішнім механізмом PHP при старті сесії або виклику session_start(). Перед тим, як буде викликана ця callback-функція, PHP викличе callback-функцію open

Значення, що повертається даної callback-функції повинно бути в такому ж серіалізованому форматі, який спочатку передавався для зберігання в callback-функцію write. Значення, що повертається, буде автоматично десеріалізовано PHP і використано для заповнення суперглобальної змінної $_SESSION. Навіть якщо дані схожі на результат serialize(), варто пам'ятати, що це інший формат серіалізації, який визначений ini-директивою session.serialize_handler

write

Callback-функція з наступною сигнатурою:

write(string $sessionId, string $data): bool

Callback-функцияwrite викликається, коли сесія має бути збережена та закрита. Ця callback-функція приймає ідентифікатор поточної сесії та серіалізовану версію суперглобальної змінної $_SESSION. Метод серіалізації, що використовується всередині PHP, визначений ini-директивою. session.serialize_handler

Передані у цю callback-функцію серіалізовані дані сесії мають бути збережені у зв'язку з переданим ідентифікатором сесії. При отриманні цих даних, callback-функція read повинна повернути те саме значення, що було передано в callback-функцію write

Ця callback-функція викликається, коли PHP завершує роботу або явно під час виклику session_write_close(). Слід пам'ятати, що після виконання цієї callback-функції PHP виконає callback-функцію close

Зауваження :

Обробник "write" не виконається доти, доки вихідний потік не буде закрито. Таким чином, виведення налагоджувальних операторів в обробнику "write" ніколи не відобразиться у браузері. Якщо потрібно вивести налагоджувальну інформацію, рекомендується записувати налагоджувальні дані у файл.

destroy

Callback-функція з наступною сигнатурою:

destroy(string $sessionId): bool

Ця callback-функція викликається, коли сесія знищується за допомогою session_destroy() або під час виклику session_regenerate_id() з параметром destroy, встановленим у true. Значення, що повертається, має бути true у разі успішного виконання, **false**в случае неудачи.

gc

Callback-функція з наступною сигнатурою:

gc(int $lifetime): bool

Callback-функція збирача сміття періодично викликається PHP для очищення даних старих сесій. Частота контролюється директивами session.gc_probability і session.gc_divisor. Значення lifetime, яке передається в дану callback-функцію, може бути встановлено в session.gc_maxlifetime. Значення, що повертається, має бути true у разі успішного виконання, **false**в случае неудачи.

create_sid

Callback-функція з наступною сигнатурою:

create_sid(): string

Ця callback-функція виконується, коли потрібний новий ідентифікатор сесії. Не передбачає параметрів, а значення, що повертається, має бути рядком, який є допустимим ідентифікатором сесії для вашого оброблювача.

validate_sid

Callback-функція з наступною сигнатурою:

validate_sid(string $key): bool

Callback-функція виконується, коли має бути запущена сесія, надається ідентифікатор сесії та вмикається session.use_strict_mode. . key – це ідентифікатор сесії для перевірки. Ідентифікатор сесії є дійсним, якщо сесія з таким ідентифікатором вже існує. Значення, що повертається, має бути true у разі успішного виконання або **false**в случае возникновения ошибки.

update_timestamp

Callback-функція з наступною сигнатурою:

update_timestamp(string $key, string $val): bool

Callback-функція виконується під час сесії . key - це ідентифікатор сесії, val - Це дані сесії. Значення, що повертається, має бути true у разі успішного виконання або **false**в случае возникновения ошибки.

Значення, що повертаються

Повертає true у разі успішного виконання або **false**в случае возникновения ошибки.

Приклади

Приклад #1 Користувальницький обробник сесії: повний код дивіться в описі SessionHandlerInterface

Тут лише продемонстровано виклик session_set_save_handler, повний приклад можна подивитися в описі SessionHandlerInterface

Зауважте, що з session_set_save_handler() ми використовуємо ООП-прототип і реєструємо функцію завершення, використовуючи прапорець параметра функції. Це зазвичай рекомендується під час реєстрації об'єктів як оброблювачів зберігання сесії.

Loading...

Примітки

Увага

Обработчикиwriteиclose викликаються після деструктора об'єкта і тому неможливо використовувати його контекст чи кидати винятки. Винятки не можуть бути оброблені, тому що не будуть спіймані, не буде відображено трасування стека виключення і виконання просто припиниться несподівано. Однак при цьому деструктори об'єкта можуть використовувати сесії.

Можна викликати session_write_close() з деструктора, щоб вирішити цю проблему "курки та яйця", але найнадійніший спосіб - це реєструвати функцію завершення, як описано вище.

Увага

Поточний робочий каталог змінюється деякими SAPI, якщо сесія закривається після завершення скрипта. Завершити сесію можна раніше за допомогою session_write_close()

Дивіться також