所以我创建了一个实现SessionhandlerInterface的类并将其设置为会话处理程序:
$sessionHandler = new SessionHandler();
session_set_save_handler($sessionHandler);
session_start();
Run Code Online (Sandbox Code Playgroud)
问题是,从不调用write函数.
如果我使用session_set_save_handler的第二个参数并将其设置为false:
session_set_save_handler($sessionHandler, false);
Run Code Online (Sandbox Code Playgroud)
然后它正常工作.有人可以向我解释这种行为吗?我使用的是PHP 5.4.6.
在文档中写道:
当使用对象作为会话保存处理程序时,使用PHP注册shutdown函数非常重要,以避免PHP内部在关闭时内部销毁对象的方式产生意外的副作用,并可能阻止调用write和close.通常,您应该使用register_shutdown_function()函数注册'session_write_close'.
从PHP 5.4.0开始,您可以使用session_register_shutdown()或在使用OOP方法调用session_set_save_handler()并传递实现SessionHandlerInterface的实例时使用'register shutdown'标志.
但我并不完全明白这一点.