所以我创建了一个实现 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 开始,您可以使用 session_register_shutdown() 或在使用 OOP 方法调用 session_set_save_handler() 并传递实现 SessionHandlerInterface 的实例时简单地使用“注册关闭”标志。
但我并不完全理解这一点。