4

我有两个 php 脚本

测试.php

<?php
 header("location: test2.php");
 setcookie("test", "8kFL4IZfjkBmV7AC", time()+60*60, '/');
 exit;
?>

test2.php

<?php
 var_dump($_COOKIE);
?>

然后我将浏览器指向重定向到 test2.php 的 test.php。然后我得到以下结果。

在 Firefox 中,我得到以下信息:

array
  'test' => string '8kFL4IZfjkBmV7AC' (length=16)

但是在 IE6 中,我得到以下信息:

array
  'PHPSESSID' => string 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (length=32)

注意:我特意把上面的 PHPSESSID 删掉了!

有谁知道我哪里出错了,为什么 IE6 没有显示我的 cookie。

提前致谢

4

5 回答 5

3

您是否在本地主机环境中工作?IE http://localhost来测试一下?如果是这样,这可能会导致设置的 cookie 出现一些问题。我的建议是为 setcookie 设置域字段,如果您在 localhost 上工作,请尝试以下操作:setcookie("username", "George", false, "/", false); 或者设置一个服务器名不是 localhost 的虚拟主机并将其用于域。

使用域设置 cookie 类似于:

setcookie("test", "8kFL4IZfjkBmV7AC", time()+60*60, '/', '.domain.com');

希望这可以帮助你。

于 2010-07-21T23:18:57.730 回答
1

我也有这个问题。我在某人的 php 网站上注意到了这一点。

在重定向的页面上设置 cookie 时,必须在调用 header('Location: ....'); 之后设置 cookie;

http://php.net/manual/en/function.setcookie.php

我仍然不确定

于 2010-07-21T21:22:16.970 回答
0

某些浏览器会在用户交互发生之前阻止设置 cookie。我知道 Safari 可以,而且我相信 IE 的工作方式相同。基本上,在从您的网站收到的第一个响应中,所有 cookie 都将被忽略。我怀疑如果您改为尝试以下操作,它将按预期工作:

test0.html

<html>
  <body>
    <a href="test1.php">force user interaction</a>
  </body>
</html>

test1.php

<?php
  header("location: test2.php");
  setcookie("test", "8kFL4IZfjkBmV7AC", time()+60*60, '/');
  exit;
?>

test2.php

<?php
  var_dump($_COOKIE);
?>
于 2010-07-22T00:40:25.577 回答
0

一个浏览器可以比另一个浏览器更快地对您正在执行的标头重定向做出反应。

尝试转动命令:

 setcookie("test", "8kFL4IZfjkBmV7AC", time()+60*60, '/');
 header("location: test2.php");
于 2010-07-21T21:14:55.333 回答
0

看看你的例子,你首先得到了 header(),然后是 setcookie()。先尝试 setcookie() 然后再做 header();

于 2010-07-21T21:17:36.933 回答