【发布时间】:2013-04-01 11:11:15
【问题描述】:
我遇到了session_start() 的问题。每次刷新/加载页面时,它都会创建一个新会话。
代码如下:
<?php
$bob = session_id();
echo "Session ID on load is ".$bob;
echo "<br>";
if($bob==""){
session_start();
$bob = session_id();
echo ' session ID currently is '.$bob;
}
// a bunch more stuff
当我加载页面时,我得到以下信息:
加载时的会话 ID 是 会话 ID 当前为 ed320bc5e24c871c9db8ea30e6796c14(或变体)
如果我刷新我得到的页面:
加载时的会话 ID 是 会话 ID 当前为 fbd69d01d511a7be382799dca7279a86(或变体)
在调用 session_start() 之前,会话 ID 始终为空白,并且始终是新的 session_id()
它在所有浏览器中都执行此操作,我已检查以确保 cookie 已打开。
会话保存路径为/tmp。我不确定它到底在哪里,但是查看我的根目录和所有其他目录,我找不到会话文件(假设它看起来像 sess_fbd69d01d511a7be382799dca7279a86)。
所以我认为保存路径发生了一些事情,但我对此太陌生了,无法确定,而且服务器管理员相当无助。诊断问题的下一步应该是什么?服务器正在运行 5.3.22。
phpinfo 是here
感谢您的帮助。
ps 如果您愿意,您可以访问 pcm.pcmxa.com 亲自查看问题。
【问题讨论】:
-
如果 /tmp 不存在,并且 php 没有对 /tmp 的写入权限,您可以看到这一点。您可能需要自己创建文件夹,或要求您的主机创建。
-
ini_set('display_errors', 'on'); error_reporting(-1);你应该会看到一些可能有帮助的警告。 -
@dev-null-dweller 代码是正确的。
-
@bwoebi 这是针对 session_start 的错误,例如不可写/不存在的会话保存路径。
-
我不同意 stackoverflow.com/questions/8028957/headers-already-sent-by-php – dev-null-dweller 是同一个问题。这显然不是同一个问题。事实上,它恰好是答案,但是由于其他原因,每次刷新时都可以创建一个新会话:session_save_path 不可写,session.cookie_secure 为 On 并且您不使用 https 等。 session.cookie_secure is On case 特别棘手,因为您没有收到任何通知或警告。
标签: php session-cookies sessionid