【问题标题】:session_start() creates new session every refresh [duplicate]session_start() 每次刷新都会创建新会话 [重复]
【发布时间】: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


【解决方案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; 行之后立即出现警告
猜你喜欢
  • 2016-02-03
  • 2014-01-15
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多