饼干无法在IE中设置?

时间:2011-11-09 07:02:51

标签: javascript html cookies internet-explorer-9

我在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”。

所以问题是为什么以及如何解决这个问题?

2 个答案:

答案 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");将其读回。