【发布时间】:2012-09-25 13:09:30
【问题描述】:
所以我创建了一个实现 SessionhandlerInterface 的类并将其设置为会话处理程序:
$sessionHandler = new SessionHandler();
session_set_save_handler($sessionHandler);
session_start();
问题是,write 函数永远不会被调用。
如果我使用session_set_save_handler的第二个参数并将其设置为false:
session_set_save_handler($sessionHandler, false);
然后它可以正常工作。有人可以向我解释这种行为吗?我正在使用 PHP 5.4.6。
在文档中有这样写:
当使用对象作为会话保存处理程序时,向 PHP 注册关闭函数非常重要,以避免 PHP 在关闭时内部销毁对象的方式产生意外的副作用,并可能阻止调用 write 和 close。通常您应该使用 register_shutdown_function() 函数注册“session_write_close”。
从 PHP 5.4.0 开始,您可以在使用 OOP 方法调用 session_set_save_handler() 并传递实现 SessionHandlerInterface 的实例时使用 session_register_shutdown() 或简单地使用“注册关闭”标志。
但我不完全理解。
【问题讨论】:
-
SessionHandler的实现是什么? -
你打电话给
session_write_close()怎么样?
标签: php