SessionHandlerInterface写入方法未被调用

Ric*_*nop 5 php

所以我创建了一个实现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'标志.

但我并不完全明白这一点.

Ja͢*_*͢ck 3

文档说明如下:

“write”处理程序直到输出流关闭后才会执行。因此,浏览器中永远不会看到“write”处理程序中调试语句的输出。如果需要调试输出,建议将调试输出写入文件。

这可能就是为什么如果您使用简单的echo.