在包含的页面中检索cookie值时出错 - PHP

时间:2013-10-16 13:59:44

标签: php session cookies include

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

我有两个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值是最后使用的,而不是当前的。我被卡住了。

感谢您的帮助,谢谢。

2 个答案:

答案 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)

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

我真的很感谢你的帮助。