设置cookie会导致意外行为

时间:2011-05-31 17:49:58

标签: javascript cookies alert shtml


我有一个多语言网站,可以在德语和英语之间切换。我希望将所选语言存储在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的值不仅仅是反转的,而且没有正确删除,而是完全废话。任何人都能解释我的代码中出现了什么问题会导致这种行为吗?

1 个答案:

答案 0 :(得分:1)

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

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