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最后一行似乎每次刷新都会增长吗?

js把数字存在cookie里,每次刷新都增加1

PRISM WPF - 导航每次都会创建新视图

每次刷新或访问页面时,Node js express-session都会创建新的会话ID

每次我打开应用程序或从 Xcode 运行它时,IOS 都会创建新的应用程序 ID

PHP !isset 和 empty & session check 每次都变为真[重复]