Javascript 为什么Firefox和Chromium的cookie行为不同?

Javascript 为什么Firefox和Chromium的cookie行为不同?,javascript,firefox,cookies,chromium,Javascript,Firefox,Cookies,Chromium,我正在使用对象在应用程序上设置cookies 我正在测试的功能是: displayWelcomeMessage = function(idElement){ var cookieName = 'username'; alert(docCookies.getItem(cookieName)); // NULL when cookie not set var defaultName = "SweetAnon", daysToExpire = 1,

我正在使用对象在应用程序上设置cookies

我正在测试的功能是:

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 v33.0.1750.152之间打印不同的结果。如果我输入
foobar
作为
username
我会得到以下结果:

  • Firefox打印
    null
    ,然后打印
    foobar
  • 它先打印
    null
    ,然后再打印
    null

<>我认为火狐行为是正确的。但是我应该怎么做才能让它在Chromium上工作呢?

解决方案是将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'
  };
参考资料


出于安全原因,如果用户使用密码登录您的站点,则将用户名存储在cookie中是一个坏主意。我正在处理一个不会存储敏感数据的字符串。我想了解谁在跨浏览器中使用cookies。其他帖子的可能重复与此问题无关。我看不出有什么解决办法。