IE不传递PHP会话变量

时间:2011-11-09 20:15:28

标签: php internet-explorer-8 session-variables firefox3.6 php-5.2

我正在尝试跨多个页面使用会话变量。但是,当我从设置的原始页面转到我服务器上的另一个页面时,变量会消失。我已经确认变量最初是在第一页上设置的,但是当我尝试在后续页面上访问它们时,它们没有任何价值。如果我访问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中的会话变量,但我在过去两天搜索过这些表单,但却找不到其他类似的东西。我希望我只是错过了一些非常简单的事情,有人可以指出我正确的方向。

2 个答案:

答案 0 :(得分:4)

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

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

答案 1 :(得分:3)

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

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

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

干杯!