0

我正在尝试跨多个页面使用会话变量。但是,当我从设置它们的原始页面转到服务器上的另一个页面时,这些变量就会消失。我已经确认变量最初是在第一页上设置的,但是当我尝试在后续页面上访问它们时,它们没有任何价值。如果我访问session_id()它与我在第一页上设置的不同。

这是我正在尝试做的简化版本:(设置会话变量的第一页)

<?php
ini_set("display_errors", "1");
error_reporting(E_ALL); 
session_start();
$_SESSION['id'] = session_id();
header('Location: pagetwo.php');
die();
?>

(我尝试访问会话变量的第二页)

<?php
ini_set("display_errors", "1");
error_reporting(E_ALL); 
session_start();
echo "SESSION[id] = ".$_SESSION['id']."<br>";
?>

$_SESSION['id']返回空白,我有一个输出错误说明:

注意:未定义索引:第 5 行 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\pagetwo.php 中的 id

现在事情变得有点奇怪了。并非所有浏览器都会出现这种情况(仅 IE8 和 Firefox 3)。我能够访问 Chrome 15 和 Firefox 7 中的会话变量。此外,我有两个运行 Apache 和 PHP 的不同服务器。我遇到这些问题的服务器运行 PHP 5.2.17,但是,当我的其他服务器运行 PHP 5.2.9 时,我可以访问所有浏览器类型中所有页面的会话变量。

看起来两台服务器之间的 PHP.ini 文件会有所不同,但是它们之间的会话设置是相同的。

我不确定其他人是否遇到过类似的问题,即 IE8 无法访问 PHP 5.2.17 中的会话变量,但我在过去两天搜索了表单,但找不到其他类似的东西。我希望我只是错过了一些非常简单的东西,有人可以指出我正确的方向。

4

2 回答 2

4

我在开发 facebook 应用程序时遇到了同样的问题 - IE 没有发送会话 cookie,因此每个页面请求都会开始一个新的请求。以下标题为我解决了这个问题:

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
于 2011-11-10T07:49:00.697 回答
3

我怀疑这是因为您在将用户重定向到pagetwo.php之前没有关闭会话变量。我建议在代码中session_write_close()设置ID值之后添加。它确保将更改添加到会话变量中,并且可以在以后的页面上检索。

<?php 
session_start();
$_SESSION['id'] = session_id();
session_write_close();
header('Location: pagetwo.php'); 
?>

session_write_close()您可以在PHP.net上阅读更多信息,如果您向下滚动到用户提供的评论,您会看到一个名叫 JP 的人对这个问题的评论。

干杯!

于 2011-11-09T21:18:42.530 回答