【发布时间】:2016-01-25 22:20:25
【问题描述】:
好的,这有点复杂:
-
我使用 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' )); -
我从域
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