【问题标题】:SessionHandlerInterface write method not being called未调用 SessionHandlerInterface 写入方法
【发布时间】:2012-09-25 13:09:30
【问题描述】:

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

但我不完全理解。

【问题讨论】:

  • SessionHandler的实现是什么?
  • 你打电话给session_write_close()怎么样?

标签: php


【解决方案1】:

documentation 声明如下:

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

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

【讨论】:

  • 感谢您在session_set_save_handler 的文档中引用此行。在write 的文档中,没有提到这一点...
猜你喜欢
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 2018-07-05
  • 2016-02-12
  • 2012-06-03
  • 1970-01-01
相关资源
最近更新 更多