【问题标题】:Cannot read cookie in Internet Explorer from PHP when script is loaded from another domain从另一个域加载脚本时,无法从 PHP 读取 Internet Explorer 中的 cookie
【发布时间】:2016-01-25 22:20:25
【问题描述】:

好的,这有点复杂:

  1. 我使用 php 在域 foo.com 上设置了一个 cookie:

    header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); setcookie("c", "value", strtotime( '+30 days' ));

  2. 我从域bar.com 调用脚本<script src='http://foo.com/script.php'>,它加载一个通过php 输出的javascript 文件

    header('Content-Type: application/javascript');
    echo $_COOKIE['c'];

现在,当我在 Chrome、Firefox、Edge 或 Internet Explorer 中打开 http://foo.com/script.php 时,它会显示 value
当我从 bar.com 加载脚本时,它也会在 Chrome、Edge(!) 和 Firefox 中显示 value,但在 Internet Explorer 10/11 中,cookie 未设置且无法读取。

我不明白为什么没有在 IE 中设置 cookie,因为我是从最初设置 cookie 的foo.com 加载脚本的。因此,脚本应该可以访问 cookie。

高度赞赏的任何想法。

【问题讨论】:

  • 如果你只是输出一些随机文本,而不是 cookie 内容,它会起作用吗?
  • 是的,这行得通。我也可以做一个var_dump($_COOKIE),它在 IE 中是空的,但在 Chrome 和 FF 中显示 cookie。
  • 听起来像微软的 xss 过滤器。尝试禁用它,看看问题是否消失(不建议将此作为解决方案,只是一种理解行为的方法)
  • 你用什么本地域名来调用这些脚本? IIRC IE 有时对它接受 cookie 的域名很奇怪,它们需要至少包含一个点 .,像 localhost 这样的名称往往会导致这方面的问题。
  • @CBroe 哇——就是这样。我之前读过这个问题,并故意为script.php 设置了一个包含. 的虚拟主机我没想到请求域也需要.,所以我为此使用了localhost。使用. 将其更改为虚拟主机有效。谢谢!您可以添加您的评论作为答案,以便我接受。

标签: javascript php internet-explorer cookies


【解决方案1】:

您使用什么本地域名来调用这些脚本?

我记得 IE 有时对它接受 cookie 的域名很特殊,它们需要至少包含一个点 . - 像 localhost 这样的名称往往会导致这方面的问题。

【讨论】:

  • 不仅域托管 cookie,而且域请求 cookie 需要包含. - 很奇怪。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2016-11-23
相关资源
最近更新 更多