听起来很傻,我对这种行为感到困惑:
在我的PHP代码中,我在其他任何东西之前调用session_start();
(在调用它之前甚至不是空格)。我可以通过设置会话变量然后回显所述变量来测试它。
如果我在我的一个页面上运行以下代码,我会得到一个预期的会话ID,但是如果我在用于ajax的一个帖子页面上运行它,那么它就会变空。只能看到我在ajax帖子页面上专门设置的会话,而不是从另一个页面设置的会话变量。
$a = session_id();
var_dump($a);
我知道我会得到回复告诉我确保我的session_start();
从一开始就被调用了,但我发誓上下(如果不是,会话不起作用)在该页面本地)。
世界上有什么可能导致这种奇怪的行为?
FWIW,添加ini_set('display_errors', 1); error_reporting(E_ALL);
除了告诉我在尝试转储从另一个页面设置的会话变量时我有一个未定义的变量时,不会给我任何信息。
答案 0 :(得分:0)
如何在页面之间导航?如果您使用header
,则在离开第一页之前不会始终写入会话数据。我不得不使用
session_write_close();
header('Location: page2.php');
答案 1 :(得分:0)
如果你说session_start()是正确实现的并且$ a在某些页面上显示但在特定页面上没有显示,我会说这很可能是因为会话变量是超全局的,并且可能在那些页面上你有一个全局变量$一个。
答案 2 :(得分:0)
这最终是由于我的/ tmp分区已满。我在这台服务器上安装了一个无头的Dropbox,它决定昨晚在一夜之间更新到一个新版本而不是自己清理。我应该收到一条通知,告知/ tmp分区已满,但我没有出于某种原因,所以我甚至没想到它是原因。
这是对发现他们遇到同样问题的其他人的警告。我仍然不完全确定为什么我能够在问题页面上设置新的会话变量,或者如果/ tmp已满,甚至可以设置其他页面的会话变量。
我感谢大家愿意提供帮助!