【问题标题】:Why cookies behavior differ between Firefox and Chromium?为什么 Firefox 和 Chromium 之间的 cookie 行为不同?
【发布时间】:2015-01-01 02:31:12
【问题描述】:

我正在使用docCookies 对象在this 应用程序上设置cookie。

我正在测试的功能是这个:

displayWelcomeMessage = function(idElement){
    var cookieName = 'username';

    alert(docCookies.getItem(cookieName)); // NULL when cookie not set

    var defaultName = "SweetAnon",
        daysToExpire = 1,
        username = docCookies.getItem(cookieName);

    // Check if cookie was already set (user "logged")
    if (username != null && username.trim() != "") {
        displayUsername(idElement, username);
    } else {
        username = prompt("If you enter your name\nI'll try to remember you :)");
        if (username != null && username.trim() != "") {
            docCookies.setItem(cookieName, username, daysToExpire);
            displayUsername(idElement, username);
        } else {
            displayUsername(idElement, defaultName);
        }
    }
    alert(docCookies.getItem(cookieName)); // Username or 'SweetAnon'
};

这里有两个警报,它们在 Firefox v28 和 Chromium v​​33.0.1750.152 之间打印不同的结果。如果我将foobar 输入为username,我会得到以下结果:

  • Firefox 打印null,然后打印foobar
  • Chromium 打印null,然后再次打印null

我认为 Firefox 的行为是正确的。但是我应该怎么做才能让它在 Chromium 上运行呢?

【问题讨论】:

  • 出于安全原因,假设用户使用密码登录您的网站,将用户名存储在 cookie 中是个坏主意。
  • 我正在处理 1 个不会存储敏感数据的字符串。我想了解哪些 cookie 可以跨浏览器工作。
  • 另一篇文章与此问题无关。我没有看到任何解决方案。

标签: javascript firefox cookies chromium


【解决方案1】:

解决方案是将cookie值分配给对象而不是变量:

displayWelcomeMessage = function(idElement)
  {
  var cookieName = 'username',
      defaultName = "SweetAnon",
      daysToExpire = 1;

  /* assign username as a property of the current function */

  this.username = docCookies.getItem(cookieName);

  alert(docCookies.getItem(cookieName)); // NULL when cookie not set

  // Check if cookie was already set (user "logged")

  if (this.username != null && this.username.trim() != "")
      {
      displayUsername(idElement, this.username);
      } 

    else 
      {
      this.username = prompt("If you enter your name\nI'll try to remember you :)");

      if (this.username != null && this.username.trim() != "") 
        {
        docCookies.setItem(cookieName, this.username, daysToExpire);
        displayUsername(idElement, username);
        } 
      else 
        {
        displayUsername(idElement, defaultName);
        }
      }

  alert(docCookies.getItem(cookieName)); // Username or 'SweetAnon'
  };

参考文献

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多