【发布时间】:2016-02-03 05:42:22
【问题描述】:
我遇到了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() creates new session every refresh、session_id() creates new session every reload 和PHP creating new session with each reload 的副本,但答案不适用。以下是相关的 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
【问题讨论】:
-
为什么要投反对票?我承认,鉴于其他人被标记为重复的事实,我预计它会被否决。我不同意它们应该被标记为重复。当我看到其中一个被标记为重复时,甚至在提供答案之前,我就觉得这没有意义。嘿,消息说,
if those answers do not fully address your question, please ask a new question.这就是我们所做的,但在提供答案之前,人们一直将其标记为重复或最糟糕的否决投票,没有任何解释。 -
有些人就是喜欢投反对票,不要太担心,除非你得到很多....