Из официального руководства php:
session_register_shutdown
– функция отключения сеанса
- Как показать изображение с моего Amazon S3 на моем веб-сайте?
- Как переписать URL-адрес только на PHP?
- Аргумент функции PHP с 3 точками перед переменной
- codeigniter Disallowed Key Characters error
- Подмена php change для входа в систему после входа пользователя в
Регистрирует
session_write_close()
как функцию выключения.
Итак, что означает завершение сеанса? В чем разница между session_write_close
и этим?
Чтобы было ясно, что делает эта функция на самом деле? Когда мы его будем использовать?
Кажется, мало кто использует и говорит об этой функции в Интернете.
Эта функция редко используется на самом деле, в Интернете почти нет обсуждений, я, наконец, нашел ответ из комментариев исходного кода:
/* This function is registered itself as a shutdown function by * session_set_save_handler($obj). The reason we now register another * shutdown function is in case the user registered their own shutdown * function after calling session_set_save_handler(), which expects * the session still to be available.
От: https://github.com/php/php-src/blob/master/ext/session/session.c
И, очевидно, по сравнению с официальным руководством, это четко указывает, что именно это делает.
Этот вопрос выглядит просто глупо.
Это справедливый вопрос. Я также был смущен документацией.
То, что я смог извлечь после прочтения его дюжину раз, состоит в том, что функция является просто сокращенной версией кода
register_shutdown_function('session_write_close');
Если вы вызываете die () или выходите в скрипте php, сеанс не будет закрыт должным образом (особенно если у вас есть собственный обработчик сеанса). Эта функция является не чем иным, как ярлыком.
Мой код начальной загрузки для моего конкретного обработчика сеанса выглядит так:
// Set the session handlers to the custom functions. $handler = new SQLSrvSessionHandler(); session_set_save_handler( array($handler, 'sessionOpen'), array($handler, 'sessionClose'), array($handler, 'sessionRead'), array($handler, 'sessionWrite'), array($handler, 'sessionDestroy'), array($handler, 'sessionGC') ); session_register_shutdown();
Функция session_register_shutdown
обеспечивает мою функцию SQLSrvSessionHandler::sessionClose
и SQLSrvSessionHandler::sessionWrite
, даже если я запускаю операторы die или exit.
Я также нашел этот ответ полезным.