SessionHandlerInterface写入方法未被调用

时间:2012-09-25 13:09:31

标签: php

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

但我并不完全明白。

1 个答案:

答案 0 :(得分:2)

documentation声明如下:

  

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

如果你使用简单的echo,这可能就是你没有看到被调用函数的原因。