我在website1.com上有以下代码:
<script type="text/javascript">
document.cookie = "qwe=1";
alert(document.cookie);
</script>
和website2.com包含:
<iframe src="http://website1.com"></iframe>
当我在IE中打开网页website2.com时,它会提醒空字符串(如果之前没有设置过cookie) 其他浏览器警告“qwe = 1”。
所以问题是为什么以及如何解决这个问题?
答案 0 :(得分:5)
关于IE的安全性。
如果您希望允许访问IFRAME中的cookie,您应该按如下方式设置HTTP标头:
ASP.NET:
HttpContext.Current.Response.AddHeader("p3p","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
JSP:
response.addHeader("P3P","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"")
PHP:
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
答案 1 :(得分:1)
使用document.cookie
设置Cookie,但是在下一次页面加载之前,它们不会发送到服务器(因此不会产生任何影响)。我假设document.cookie
的标准行为是模仿这个并且不会更新读取值,直到下一个页面加载(换句话说,设置document.cookie
设置一个cookie,但是阅读document.cookie
给出了在请求中发送的cookie。)
IE9修复了旧版本中存在的许多问题。我的意思是 LOT 。这很可能就是其中之一。我想,解决方法是自己处理cookie。就像在PHP中一样,我有以下功能:
<?php
function setRealCookie( ... ) {
setcookie( ... );
$_COOKIE[...] = ...;
}
?>
在JavaScript中,您可以创建一个跟踪cookie的对象,包括在设置cookie时自行更新等等。类似的东西:
(cookies = {
data: {},
init: function() {
var c = document.cookie.split(";"), l = c.length, i, t;
for( i=0; i<l; i++) {
t = c[i].split("=");
cookies.data[t.shift()] = t.join("=");
}
},
read: function(key) {
return cookies.data[key];
},
set: function(key,value) {
document.cookie = key+"="+value;
cookies.data[key] = value;
}
}).init();
然后,您可以使用cookies.set("qwe","1");
设置Cookie并使用cookies.read("qwe");
将其读回。