2015-04-22 4 views
5

Из официального руководства PHP:Что делает session_register_shutdown на самом деле?

session_register_shutdown - Сессия Функция отключения

Регистры session_write_close() как функция выключения.

Итак, что означает завершение сеанса? В чем разница между session_write_close и этим?

Чтобы было ясно, что делает эта функция на самом деле? Когда мы его будем использовать?

Кажется, что люди используют и говорят об этой функции в Интернете.

+0

Вы прочли оставшуюся часть страницы? «Регистрирует session_write_close() как функцию выключения». Пользовательский комментарий, дающий эквивалент для старых версий PHP, также дает довольно четкое представление о том, что он делает. – IMSoP

+3

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что на этот вопрос можно ответить, прочитав документацию по адресу http://php.net/session_register_shutdown. – Sven

+3

Конечно, я читал, но я до сих пор не понимаю. «Регистрирует session_write_close() как функцию выключения». Когда и почему мы можем использовать эту функцию? –

ответ

6

Эта функция редко используется на самом деле, нет почти никакого обсуждения в Интернете, я, наконец, нашел ответ от комментариев исходного кода:

/* 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

и, очевидно, по сравнению к официальному руководству, это четко указывает, что именно это делает.

Этот вопрос выглядит просто глупо.

+0

Спасибо, это мне очень помогло! Это должно быть в онлайн-документах! – oucil

3

Это справедливый вопрос. Я также был смущен документацией.

То, что я был в состоянии извлечь после прочтения десятка раз в том, что функция просто сокращенная версия кода

register_shutdown_function('session_write_close');

Если вы звоните умереть() или выход в 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 называется даже если я бег фильера или выход заявления.

Я также нашел this answer полезным.

Смежные вопросы