2011-05-31 89 views
3


我有一个多语种网站,可以在德语和英语之间切换。我希望将所选语言存储在cookie中,以便访问者下次访问该网站时不必一次又一次地将其切换为他的首选语言。不幸的是,我有一个奇怪的行为。它看起来像这样:设置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() + ";"; 
    } 
} 

萤火虫说,它一跃而起的权利,如果分支,所以当我点击“德国”,这部分将被执行“的myCookie = DE”,否则英国的分支。这看起来不错。但是,当我去我的网站的任何网页(用于测试,我选择了指数的网站),并执行

alert(document.cookie); 

我suddendly得到的结果在德国的网页“的myCookie = EN”,尽管它应该是“MYCOOKIE = DE”,因为函数跳转到右边的IF分支(else分支)。当我切换到英语时,我在英文网页上获得“MYCOOKIE = DE; MYCOOKIE = EN”的结果。所以突然有两个同名的饼干。所以cookie的价值不只是倒过来,而不是正确删除,但完全废话。任何人都可以解释导致这种行为的代码中有什么问题吗?

回答

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=/' 
+0

非常感谢。你是对的。解决了它:) – Bevor 2011-05-31 19:57:22

+0

太棒了!我认为这可能是问题 – nikmd23 2011-06-01 17:57:37