0

我遇到了一个问题,我会用一个有代表性的场景来解释自己:

我有两个 php 脚本/页面:

测试1.php:

<?php
include_once('test2.php');

session_start();
$id = session_id();

echo "my session id: " .$id.'<br>';
setcookie("SSID", $id);

test(); 
?>

测试2.php:

<?php

function test() {
echo "session id on test2 <br>";
echo $_COOKIE["SSID"];
}

?>

这是我的问题的一段代表性代码,我想做的是将我的会话 ID 存储在 cookie 中并在第二页中检索它以恢复我的会话。我知道这没有必要。在我的测试服务器中我不需要这样做,但在生产服务器中这是必需的。我无法更改生产服务器的任何配置,因此我必须使代码适应服务器的配置。

我的主要问题是第二个脚本最后一次获取存储在 cookie 中的会话 ID。一个例子:

第一次执行 test1.php 我得到:

my session id: dg2mjk8ros8ajrj3n6i8oa4gj1
session id on test2 
vrulbnvvff23bpmm6qbbqbk960

第二次执行 test1.php:

my session id: cj17k0q08mhgpjn9gf0dt0n9i6
session id on test2 
dg2mjk8ros8ajrj3n6i8oa4gj1

如您所见,在 test2.php 函数中检索到的 cookie 值是上次使用的,而不是当前的。我被困住了。

我会很感激任何帮助,谢谢。

4

2 回答 2

0

您的代码有问题,或者很可能是您的服务器设置有问题。你 session_id 不应该改变,由于某种原因,你的网络服务器在每次页面加载时都会生成一个新会话。这不应该发生,它甚至违背了进行会话的目的。是否有任何其他代码正在运行或者是这个?

您的 cookie 始终与前一个值相同的原因是因为$_COOKIE在您的 php 代码运行之前填充了数组,如果您在代码中创建新的 cookie,它不会更改。

我在我的设置中尝试了相同的代码,每次都得到相同的 session_id 和相同的 cookie 值。

我会尝试解决您的服务器设置问题,但如果您不能,您可以强制会话 ID 保持一致。做这个:

if(isset($_COOKIE['SSID']) {
    session_start($_COOKIE['SSID']);
} else {
    session_start();
}

此外,如果 cookie 已经存在,则无需创建新的:

if(!isset($_COOKIE['SSID']) {
    setcookie("SSID", $id);
}
于 2013-10-16T14:10:33.003 回答
0

我最终只使用会话存储解决了这个问题,但在更改生产服务器中的一些参数之前没有解决,我不知道是哪一个,抱歉。

我真的很感谢你的帮助。

于 2013-10-16T16:12:51.833 回答