[英]Why does my PHP file stop executing when I use session_start()?
[英]Why is __wakeup() called on my object when I session_start()?
我有以下问题:
我使用了一个带有单例模式的类,因此我将 __wakeup() 设为私有。 该对象绝不会存储在会话中。 当我调用 session_start() 时,我收到此错误消息:
Warning: Invalid callback MySingletonClass::__wakeup, cannot access private method MySingletonClass::__wakeup() in Session.php on line 32
Session.php 的第 32 行内容如下:
30 public function startSession() {
31 if (session_status() == PHP_SESSION_NONE) {
32 session_start();
33 }
34 }
我知道存储在会话中的对象正在被序列化和反序列化,但 MySingletonClass 从未存储在会话中......实际上,$_SESSION 数组是空的。
我在想,也许我在某个时候不小心将它存储在会话中并且它就在那里,但是即使我清除了所有 $_SESSION 数据,销毁会话,删除服务器上的会话文件,重新启动 Apache 并启动新会话,这种情况仍然存在...
更奇怪的是,我使用了几个不同的类,它们使用完全相同的单例模式,具有私有的 __wakeup(),并且它们从不提出这个问题。 它只是这个。
到底是怎么回事? 我的代码是不是太疯狂了 php 被搞糊涂了?
[编辑] 我想出了一些事情:
如果在定义MySingletonClass
之后调用session_start()
会发生此错误(因此在包含/需要包含其定义的文件之后),但如果session_start()
移动到脚本执行的最开始,在任何其他文件之前,则不会发生此错误包括/需要。
有人在这里有解释吗? 有session_start()
早点是好的,我想,无论如何我都会启动它,但我想知道这里发生了什么......
我解决了这个问题 - 问题出在我的自动加载程序中。 我认为。 也许。
老实说,我不知道到底出了什么问题,但是在我取消了自动加载器类并从头开始重新编写之后,错误消息消失了,所以我认为是自动加载器出了问题。
你的猜测和我的一样好。
刚刚有同样的问题,PHPUnit 5.7.27。
就我而言,backupGlobals 设置为“true”。 在我的 phpunit.xml 中将它设置为 false,修复它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.