我遇到了问题,我将用一个代表性的场景来解释自己:
我有两个php脚本/页面:
Test1.php:
<?php
include_once('test2.php');
session_start();
$id = session_id();
echo "my session id: " .$id.'<br>';
setcookie("SSID", $id);
test();
?>
Test2.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值是最后使用的,而不是当前的。我被卡住了。
感谢您的帮助,谢谢。
答案 0 :(得分:0)
您的代码出现问题,或者很可能是您的服务器设置错误。您的session_id不应更改,由于某种原因,您的Web服务器每次加载页面时都会生成一个新会话。这不应该发生,它甚至会破坏会议的目的。是否还有其他代码正在运行?是吗?
您的cookie始终与之前的值相同的原因是因为在您的PHP代码运行之前填充了$_COOKIE
数组,如果您在代码中创建新的cookie,则不会更改它。
我在设置上尝试了相同的代码,每次都获得相同的session_id和相同的Cookie值。
我会尝试修复您的服务器设置问题,但如果不能,您可以强制会话ID保持一致。这样做:
if(isset($_COOKIE['SSID']) {
session_start($_COOKIE['SSID']);
} else {
session_start();
}
此外,如果cookie已经存在,则无需创建新cookie:
if(!isset($_COOKIE['SSID']) {
setcookie("SSID", $id);
}
答案 1 :(得分:0)
我终于使用会话存储解决了这个问题,但在更改生产服务器中的某些参数之前没有解决这个问题,我不知道哪一个,对不起。
我真的很感谢你的帮助。