【问题标题】:jQuery: Problems cookies internet explorerjQuery:问题 cookie Internet Explorer
【发布时间】:2012-12-16 19:01:15
【问题描述】:

我已经做了一个登录页面。当用户登录时,向 API 发送请求。此 API 是 PHP 并检查用户名和密码。当两者都正确时,将发回唯一密钥(将其放置在数据库中以供进一步使用:用户 ID 和网站所需的其他内容)。 在该密钥被发回后,它被放置在一个 cookie 中:

$.cookie("session", JSON.stringify(result));

设置 cookie 后,我将用户发送到新页面:

location.href = 'dashboard.htm';

在此页面中,jQuery 检查 cookie “会话”是否存在。如果没有,则将用户发送回登录页面。

sessionId = ($.cookie("session") ? JSON.parse($.cookie("session")).SessionId : 0);
return sessionId;

这在 Chrome 中运行良好,但 IE (8/9) 对此有一些问题。我发现当您访问dashboard.htm 时,会话就存在了。我一按 F5,会话就消失了。有时cookie根本没有设置!

我似乎无法弄清楚为什么会在 IE 中发生这种情况。有人知道吗?也欢迎保存该唯一密钥的其他选项/想法。

提前致谢。

【问题讨论】:

    标签: jquery internet-explorer cookies


    【解决方案1】:

    可能的想法/您可能会尝试的事情清单。多年来收集的一些信息!

    您还应该 100% 确保您的 cookie 代码不会重置 cookie。我已经做到了,我知道其他人也做到了。我们发誓它不是我们的代码,但最终有时它是;)

    在您的 cookie 名称中远离特殊字符,例如下划线 (_) 和连字符 (-)。 IE 不喜欢它们,有时某些东西可以正常工作,有时则不行。

    确保为 cookie 设置一个非常遥远的过期日期。浏览器使用计算机本地时间来查看 cookie 是否仍然可用。如果计算机的日期和时间不正确,可能会导致类似这样的问题。

    确保为正确的域名设置 cookie,我见过有人为 path.example.com 设置 cookie,然后尝试从 bob.example.com 访问它们。由于跨域策略,这将不起作用。

    如果您尝试通过 Javascript 访问 cookie,您应该确保您没有将 httponly 标志设置为 true。此标志将 100% 防止任何 cookie 被 Javascript 访问。

    如果您在 iframe 或框架集中设置 cookie,您很可能需要在服务器上设置 P3P 策略。如果您计划支持 IE,您很可能应该有一个人。欲了解更多信息,请访问http://en.wikipedia.org/wiki/P3P

    设置 P3P 策略的示例 HTACCESS:

    <IfModule mod_headers.c>
        Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
    </IfModule>
    

    对于监控 cookie 的方法,我建议使用 Chrome 的检查器。在“网络”选项卡下,您可以单击请求,它将为您提供更多选项卡,例如 Cookies 选项卡,可让您查看所有 cookie。

    【讨论】:

    • 感谢您的信息!现在正在尝试。放入 cookie 的结果中没有使用特殊字符。但是,放置在 cookie 中的数据是字符串化的 json ......我删除了它,现在它似乎工作得更好了。我不使用域名。路径始终是“/”......这很糟糕吗?我确实使用 iFrame。我正在阅读 P3P ......但它有很多文字。因此,我将找到更多中肯的信息。至少我知道要寻找什么不需要 Chrome 的检查器。 Chrome 仍然可以正常工作。这真的是一个 IE 问题......坏人仍然使用这个 :)
    • 既然您已确认您使用 iframe,我编辑了我的答案,以包含使用 HTACCESS 设置 P3P 策略的示例。
    • 谢谢,但我想我会删除 iFrame 并使用标签(或其他东西)...我不喜欢在我的设计中使用它们...其他问题:p 之后仍然与 cookie 搏斗登录... 伙计!这开始受伤了
    • 这个 rails gem 为我解决了 iframe cookie P3P 问题github.com/grosser/ie_iframe_cookies
    【解决方案2】:

    也许是 Steven 给出的答案的一部分,但我已经找到并重写了一些 cookie 的功能:

    function setCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
    }
    

    并获得一个 cookie:

    function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) 
            return c.substring(nameEQ.length, c.length);
    }
    return null;
    }
    

    这对我来说效果更好。

    作为 iFrame 的一部分:已修复。可以再次找到 Cookie,我将 ajax 调用从 json 更改为 jsonp。

    加上 Steven 的一些提示,现在在 IE 中一切正常。甚至 Chrome 也得到了需要做的事情:)

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2012-05-24
      • 1970-01-01
      相关资源
      最近更新 更多