【发布时间】:2014-07-26 10:01:13
【问题描述】:
我制作了一个在 99.9% 的情况下都能正常工作的 img 编辑器。
但是,在那罕见的 0.1% 中发生了一些奇怪的事情,我的会话记得不是正确的值。
我在初始化类的页面中有这个:
$imgScreen = new img4crop();
// And here some settings like $imgScreen->setExtraJs($extraJs);
在这个类中,我有一个函数可以将$this 数据保存到一个数组中:
private function save(){
$_SESSION['cropper'][$this->uniqid] = serialize($this);
}
在init-page.php 我打开一个fancybox,将设置加载回类中:
$info = unserialize($_SESSION['cropper'][$_GET['id']]);
// Should now be the same as $imgScreen
问题
有时$_SESSION['cropper'][$_GET['id']] 设置为NULL。我不知道为什么。 这种情况很少发生。 密钥已设置。
当我调试并将echo $_SESSION['cropper'][$this->uniqid]; 附加到save() 函数时,它为我提供了我希望它具有的值。
那么,我的会话价值去哪里了,只是在那个罕见的场合?为什么它不在fancybox 屏幕中?
第 1 条评论后: 初始化页面可以启动多个实例,它们各自在 $_SESSION['cropper'] 中获得自己的值。在上述情况下,它们都起作用,只是那个不起作用。重新加载时,我启动了新实例并且完全相同的屏幕不起作用,即使我现在有一个新的、新鲜的 id
编辑: 更奇怪的是:如果图像所在的位置有一个与类将使用同名的文件,则没有问题。奇怪的部分:整个类没有关于文件的代码,除了最后一步(屏幕有 3 个步骤),我使用 ImageMagick。
重要提示:当我安装发生这种情况的页面时,目标文件也不存在,开始为空白。
【问题讨论】:
-
好吧,如果启动不同的会话,它会是 NULL,不是吗?
-
没有 new 会话开始,只是继续。同一
$_SESSION数组中的所有其他值保持完全相同。仅此 1 个值。 -
你试过转储整个会话吗?
-
哈哈,当然,调试了一段时间了。
-
您能否自己重现此问题,或者这些错误是您从访问者那里看到的?它可能只是一个尝试不同 id 的机器人,或者甚至是一个用户试图在会话之间错误地移动。
标签: php session instance-variables