3


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

4

1 回答 1

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=/'
于 2011-05-31T18:20:38.260 回答