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