【问题标题】:Setting cookie leads to an unexpected behaviour设置 cookie 会导致意外行为
【发布时间】:2011-05-31 17:49:57
【问题描述】:


我有一个多语言网站,可以在德语和英语之间切换。我想将选择的语言存储在 cookie 中,这样访问者下次访问网站时就不必一遍又一遍地切换到他喜欢的语言。不幸的是,我对此有一种奇怪的行为。它看起来像这样:

我有一个切换语言的链接(onclick)。这个函数看起来像这样:

function storeLanguage(lang)  {
    /*deletes the cookie? */
    document.cookie = "MYCOOKIE=; expires=Thu, 01-Jan-70 00:00:01 GMT;";
    var ablauf = new Date();
    var expTime = ablauf.getTime() + (60 * 24 * 60 * 60 * 1000); //Cookie for 60 days
   ablauf.setTime(expTime);

   if (lang == 'en')  {
            document.cookie = "MYCOOKIE=EN; expires=" + ablauf.toGMTString() + ";";
   }
   else  {
       document.cookie = "MYCOOKIE=DE; expires=" + ablauf.toGMTString() + ";";
   }
}

Firebug 说它会跳转到正确的 IF 分支,所以当我点击“德语”时,这部分会执行“MYCOOKIE=DE”,否则会执行英语分支。这看起来是对的。但是当我访问我网站的任何网页时(为了测试我选择了索引网站)并执行

alert(document.cookie);

我突然在德国网页“MYCOOKIE=EN”上得到结果,虽然它应该是“MYCOOKIE=DE”,因为该函数跳转到了正确的 IF 分支(其他分支)。当我切换到英语时,我会在英语网页“MYCOOKIE=DE; MYCOOKIE=EN”上得到结果。于是突然出现了两个同名的cookie。因此,cookie 的值不仅被反转,也没有被正确删除,而是完全废话。谁能解释我的代码中有什么问题导致了这种行为?

【问题讨论】:

    标签: javascript cookies alert shtml


    【解决方案1】:

    确保您也正确设置了 cookie 的路径。例如,如果您的站点语言嵌入在 URL 中(即:http://yoursite.com/en/index.html),您可能会将 cookie 设置为仅在路径包含“/en”时才有效。完整的 cookie 设置语法如下所示:

    document.cookie = 'mycookie=somevalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/'
    

    【讨论】:

    • 太棒了!我认为这可能是问题
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 2021-06-04
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多