5

所以我创建了一个实现 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 的实例时简单地使用“注册关闭”标志。

但我并不完全理解这一点。

4

1 回答 1

3

文档指出以下内容:

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

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

于 2012-09-25T14:11:43.323 回答