session_start() 每次刷新都会创建新会话 [重复]
Posted
技术标签:
【中文标题】session_start() 每次刷新都会创建新会话 [重复]【英文标题】:session_start() creates new session every refresh [duplicate] 【发布时间】: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 的错误,例如不可写/不存在的会话保存路径。
我不同意 ***.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 特别棘手,因为您没有收到任何通知或警告。
【参考方案1】:
如果您的会话目录(就像您所说的 /tmp 一样)不可写,那么它将无法保存并且每次都必须重新生成一个新目录。验证方法如下:
if (!is_writable(session_save_path()))
echo 'Session save path "'.session_save_path().'" is not writable!';
如果是这种情况,您需要让服务器管理员授予您的网络服务器运行的任何用户写入 /tmp 目录的权限。
【讨论】:
谢谢。我添加了该代码但没有回显,表明该目录是可写的。使用 set_ini 时确实收到错误警告。警告:session_start():无法发送会话 cookie - 标头已由第 91 行 /home/pcmxacom/public_html/pcm/index.php 中的 /home/pcmxacom/public_html/pcm/index.php:85 发送的标头第 91 行是上面代码中的 session_start()。在 echo "Session ID on load is ".$bob; 行之后立即出现警告以上是关于session_start() 每次刷新都会创建新会话 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
TablePanelLayout最后一行似乎每次刷新都会增长吗?
每次刷新或访问页面时,Node js express-session都会创建新的会话ID