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()
Дивіться також
- Директиваsession.save_handler
- Директиваsession.serialize_handler
- register_shutdown_function() - Реєструє функцію, яка виконається після завершення роботи скрипту
- session_register_shutdown() - функція завершення сесії
- Обратитесь к» save_handler.incдля повного набору рекомендацій щодо реалізації