所以我创建了一个实现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注册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'标志。
但我并不完全明白。
答案 0 :(得分:2)
documentation声明如下:
直到输出流之后才执行“write”处理程序 关闭。因此,从“write”处理程序中的调试语句输出 将永远不会在浏览器中看到。如果需要调试输出, 建议将调试输出写入文件。
如果你使用简单的echo
,这可能就是你没有看到被调用函数的原因。