IE 不接受来自 iframe 的 GET
Posted
技术标签:
【中文标题】IE 不接受来自 iframe 的 GET【英文标题】:IE doesn't accept GET from iframe 【发布时间】:2015-05-14 10:20:07 【问题描述】:回答:
事实证明,IE 不允许在 iFrame 中加载的页面放置 cookie,这使我无法存储 SESSION cookie 来识别用户。防止这种情况的唯一方法是实施用户 Piskvor 解释的 P3P 策略:Cookie blocked/not saved in IFRAME in Internet Explorer
问题:
我有一个问题,不知道为什么会发生。
我在 domain1.net 上有一个页面,其中包含一些 javascript,它从该页面中抓取一个值,然后将一个 iframe 添加到该页面,其中包含一个不同域的 src,例如 http://www.domain2.net/login.php?id=123
。 login.php 从 url 获取 id,启动 PHP 会话并通过设置 $_SESSION['id']
登录用户(请不要评论它有多不安全,它比这更复杂一点)。如果 url 中没有设置 id,它会返回一个页面告诉用户登录。
这在 Chrome 和 Firefox 上都可以正常工作,但 IE 只显示“请登录”页面。如果我随后在另一个选项卡中打开 login.php?id=123
页面,它将登录,如果我随后刷新 domain1.net 上的页面,它将显示用户已在 iframe 中登录。
有人能解释一下吗?似乎 IE 忽略了 iframe 的 url 中的 GET 值。
作为参考,这是我在 domain1.net 上的代码:
<script type="text/javascript">
$(document).ready(function()
$.get('http://www.domain1.net/base/header', function (response, status, xhr)
var iframeid = response.match(/Profile\/Detail\/(.*?)"/);
if (iframeid)
theid = iframeid[1];
document.getElementById("addiframe").innerhtml = "<iframe src=\"http://www.domain2.net/login.php?n=" + theid + "\" width=\"100%\" height=\"3000\" frameborder=\"0\" id=\"braintrainer\"></iframe>";
else
document.getElementById("addiframe").innerHTML = "<iframe src=\"http://www.domain2.net/login.php?logout\" width=\"100%\" height=\"3000\" frameborder=\"0\" id=\"braintrainer\"></iframe>";
);
);
</script>
<div id="addiframe"></div>
【问题讨论】:
也许你有这个问题(检查第一个答案,你永远不知道):***.com/questions/1173137/… 我已经尝试降低我的安全级别,但遗憾的是它并没有产生任何影响。看来 IE 是故意阻止它的。 哦,我发现下面这个问题是同一个人问的。显然,IE 正确传递了 GET 参数,但没有在 iframe 中设置 cookie:***.com/questions/1329613/… 非常感谢,这似乎确实是问题所在,根据asnwer可以通过p3p策略解决! 原因是IE。 【参考方案1】:事实证明,IE 不允许在 iFrame 中加载的页面放置 cookie,这使我无法存储 SESSION cookie 来识别用户。
防止这种情况的唯一方法是按照用户 Piskvor 的解释实施 P3P 策略:Cookie blocked/not saved in IFRAME in Internet Explorer
【讨论】:
以上是关于IE 不接受来自 iframe 的 GET的主要内容,如果未能解决你的问题,请参考以下文章
IE11 在来自 iFrame 的 Ajax POST 操作期间返回状态 0(XMLHttpRequest:网络错误 0x2ee2
PHP 标头重定向不会在 IE 中重新加载 <iframe>