【发布时间】: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>
【问题讨论】:
-
也许你有这个问题(检查第一个答案,你永远不知道):stackoverflow.com/questions/1173137/…
-
我已经尝试降低我的安全级别,但遗憾的是它并没有产生任何影响。看来 IE 是故意阻止它的。
-
哦,我发现下面这个问题是同一个人问的。显然,IE 正确传递了 GET 参数,但没有在 iframe 中设置 cookie:stackoverflow.com/questions/1329613/…
-
非常感谢,这似乎确实是问题所在,根据asnwer可以通过p3p策略解决!
-
原因是IE。
标签: javascript php jquery internet-explorer iframe