【问题标题】:php SetCookie works in Firefox, but not IEphp SetCookie 适用于 Firefox,但不适用于 IE
【发布时间】:2011-03-19 05:58:54
【问题描述】:

我有两个 php 脚本

test.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。

提前致谢

【问题讨论】:

    标签: php internet-explorer session cookies setcookie


    【解决方案1】:

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

    试着调转命令:

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

    【讨论】:

    • 我已经这样做了,并且还把 sleep(2) 放在了这两行之间,但仍然没有区别:-(
    • 这些语句的顺序应该对响应没有影响。根据 RFC 2616 (HTTP 1.1) 第 6.1 节 (w3.org/Protocols/rfc2616/rfc2616-sec6.html),Status 标头是响应的第一行,然后是其他标头(其中 cookie 是一个)。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      我还是不确定

      【讨论】:

        【解决方案4】:

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

        使用域设置 cookie 类似于:

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

        希望对你有所帮助。

        【讨论】:

          【解决方案5】:

          某些浏览器会在用户交互发生之前阻止设置 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);
          ?>
          

          【讨论】:

            猜你喜欢
            • 2012-06-23
            • 2013-11-10
            • 2013-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-27
            • 2012-02-14
            • 2015-05-07
            相关资源
            最近更新 更多