0

听起来很愚蠢,但我对这种行为感到困惑:

在我的 PHP 代码中,我session_start();在其他任何东西之前调用(甚至在调用之前没有空格)。我可以通过设置会话变量然后回显所述变量来测试这一点。

如果我在我的一个页面上运行以下代码,我会得到一个预期的会话 ID,但如果我在用于 ajax 的一个帖子页面上运行它,那么它会出现空。只能看到我在 ajax 帖子页面上专门设置的会话,而不是从另一个页面设置的会话变量。

 $a = session_id();
 var_dump($a);

我知道我会收到回复,告诉我确保我session_start();从一开始就被调用,但我发誓它是(如果不是,会话将不会在该页面上本地工作)。

到底是什么导致了这种奇怪的行为?

FWIW,ini_set('display_errors', 1); error_reporting(E_ALL);除了告诉我在尝试转储从另一个页面设置的会话变量时我有一个未定义的变量之外,添加并没有给我任何信息。

4

3 回答 3

0

这最终是由我的 /tmp 分区已满引起的。我在这台服务器上安装了一个无头保管箱,它决定昨晚一夜之间将自己更新到一个新版本,而不是在自己后面清理。我应该收到 /tmp 分区已满的通知,但由于某种原因我没有收到,所以我什至没有想到这是原因。

让这对那些发现他们有同样问题的人发出警告。我仍然不完全确定为什么我能够在问题页面上设置一个新的会话变量,甚至在 /tmp 已满时为其他页面设置会话变量。

我感谢每个人愿意提供帮助!

于 2013-10-04T12:17:22.320 回答
0

您如何在页面之间导航?如果您使用header,则会话数据并不总是在离开第一页之前写入。我不得不使用

session_write_close(); 
header('Location: page2.php');
于 2013-10-04T04:28:40.170 回答
0

如果您说 session_start() 正确实现并且 $a 显示在某些页面上但未显示在特定页面上,我会说这很可能是因为会话变量是超级全局的,并且可能在这些页面上您有一个全局变量 $a。

于 2013-10-04T04:39:43.653 回答