问题描述
|
我有一个多语言网站,可以在德语和英语之间切换。我想将选择的语言存储在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分支,所以当我单击\“ German \”时,将执行该部分\“ MYCOOKIE = DE \”,否则执行英语分支。这看起来不错。但是,当我进入网站的任何网页时(为了进行测试,我选择了索引网站)并执行
alert(document.cookie);
我突然在德语网页\“ MYCOOKIE = EN \\”上得到了结果,尽管它应该是\“ MYCOOKIE = DE \”,因为该函数跳到了右边的IF分支(其他分支)中。当我切换到英语时,结果显示在英语网页“ MYCOOKIE = DE; MYCOOKIE = EN \”上。因此,突然有两个同名的Cookie。因此,Cookie的值不仅会被颠倒,不会被正确删除,而且完全是垃圾。谁能解释我的代码中导致此行为的错误?
解决方法
确保您也正确设置了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=/\'