【问题标题】:Cookies cannot be set in IE?IE不能设置cookies?
【发布时间】:2011-12-25 01:50:03
【问题描述】:

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

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

【问题讨论】:

  • header('P3P: CP="CAO PSA OUR"');

标签: javascript html cookies internet-explorer-9


【解决方案1】:

这是关于 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"');

【讨论】:

    【解决方案2】:

    Cookie 使用document.cookie 设置,但是它们不会发送到服务器(因此在下一次页面加载之前没有效果)。我假设document.cookie 的标准行为是模仿这一点,并且在下一个页面加载之前不更新读取值(换句话说,设置document.cookie 设置一个cookie,但读取document.cookie 给出了在请求)。

    IE9 修复了旧版本中存在的许多问题。我的意思是很多。这很可能是其中之一。我想,解决方法是自己处理 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");读回来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-23
      • 2021-10-04
      • 1970-01-01
      • 2022-10-01
      • 2012-09-27
      • 1970-01-01
      • 2018-04-08
      • 2013-11-08
      相关资源
      最近更新 更多