Что делает session_register_shutdown?

Из официального руководства php:

session_register_shutdown – функция отключения сеанса

Регистрирует 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.

Я также нашел этот ответ полезным.