2015-04-22 276 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::sessionCloseSQLSrvSessionHandler::sessionWrite被称为就算我跑的模具或退出声明。

我还发现this answer有帮助。

相关问题