从官方php手册:
session_register_shutdown
- 会话关闭功能将
session_write_close()
注册为关闭功能。
那么,会话关闭意味着什么? session_write_close
与此之间的区别是什么?
为了说清楚,这个功能实际上做了什么?我们什么时候使用它?
似乎很少有人在网上使用和讨论这个功能。
答案 0 :(得分: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
显然,与官方手册相比,这清楚地说明了它究竟做了什么。
这个问题看起来很傻。
答案 1 :(得分:3)
这是一个公平的问题。我也对文档感到困惑。
在阅读十几次后我能够提取的是该功能只是代码的快捷版本
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
被调用,即使我运行骰子或退出语句。
我还发现this answer很有帮助。
答案 2 :(得分:0)
很少使用
在会话被销毁时将调用会话关闭功能,使您有机会在会话不再可用之前对会话执行最终操作(例如,可以从$ _SESSION变量中提取参数)。