session_start()每次刷新都会创建新会话,没有任何警告


session_start() creates new session every refresh, no warning

我的session_start()有问题。它在每次刷新/加载页面时都会创建一个新会话。

以下是执行的完整脚本的代码:

    // Stuff added to see why a new session id is created. 
    ini_set(display_errors, 1);
    error_reporting(E_ALL);
    $session_dir = session_save_path();
    $last_session_id = file_get_contents("$session_dir/last_session_id.txt");
    $message =  "Last session id : $last_session_id. -- ";
    if(!is_writable($session_dir)) $message .= "Directory $session_dir is not writable. --";
    if(headers_sent($file, $line)) $message .= "Headers already sent at $line in $file. --";
    // The code just start a session and output a message to see what is going on. 
    if (!session_start()) {
        $message .= "Failed to start the session. --";
    }
    else
    {
      $message .=  "New session id : " . session_id() . "<br>";
      file_put_contents("$session_dir/last_session_id.txt", session_id());
    }
    echo $message; // Last session id : hh3isj5cc1b964itlgek89vm13. -- New session id : 6hss2s8v340n5qad0smbmmlfm3

没有任何警告或通知,什么都没有,只是每次在本地服务器上显示不同的新会话id的消息,只有我在执行此脚本。这是session_start()在每次刷新时创建新会话,session_id()在每一次重新加载时创建新的会话,PHP在每次重新加载时都创建新会话的重复,但答案不适用。以下是相关的php.ini设置:

session.save_handler = files
session.save_path = "/var/www/html/php_session"
session.use_strict_mode = Off
session.use_cookies = 1
session.cookie_secure = On
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly = On
session.serialize_handler = php

好吧,我想通了。很简单,session.cookie_secure = On和我没有使用https。因此,正如预期的那样,没有返回会话cookie,而是创建了一个新的会话。尽管如此,我觉得它可以帮助其他人看到这一点。我完全不明白为什么这些问题被标记为重复,甚至在人们有机会回答之前。考虑到"重复"的问题显然没有令人满意的答案,这一点尤其难以理解。就好像这里的一些人有这样的态度,如果有一些方法会出错,那么不要问为什么。在每次重新加载时,没有太多方法可以重新创建会话。这个问题可以在问答中解决;一种格式,很完美。