我们正在使用一台服务器上有多个服务。因此,为了确保PHP会话不混合,我们希望为每个服务使用不同的cookie。我们创建了一个名为sec_session_start
的函数,我们为此服务定义了cookie(mySession
)。然后,我们创建了第二个名为start_my_session
的函数来连接服务cookie。
每次我们尝试使用start_my_session
时,它都会获取PHPSESSID内的信息,而不是mySession。我该如何解决这个问题。
以下功能仅在一个地方调用(当用户登录系统时)。
function sec_session_start() {
$secure = false;
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate the safe session (ini_set)");
exit();
}
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
session_name('mySession');
session_start(); // Start the PHP session.
echo session_id(); // USE AT THE MOMENT FOR DEBUGGING ONLY
}
最后一条指令返回的会话ID是与mySession cookie对应的id。 (我检查了server / tmp文件夹和Chrome的资源调试器。)
用户登录后,在每个其他安全页面内调用以下函数。
function start_my_session() {
echo session_name('mySession').'<br>'; // DEBUG : display PHPSESSID
echo session_name().'<br>'; // DEBUG : display mySession
session_start(); // Start the mySession
echo session_id(); // DEBUG : display the PHPSESSID session id
}
正如评论中所提到的,session_id仍然指向PHPSESSID而不是mySession。
关于我们做错了什么以及我们如何解决它的任何建议?
答案 0 :(得分:1)
这可能听起来不合逻辑,你会认为我是坚果但是:
在您使用session_name(...)
切换会话名称之前(是的,这意味着它也会在会话开始之前!)...运行session_write_close();