繁体   English   中英

设置 cookie 会导致意外行为

[英]Setting cookie leads to an unexpected behaviour


我有一个多语言网站,可以在德语和英语之间切换。 我想将选择的语言存储在 cookie 中,这样访问者下次访问网站时就不必一遍又一遍地切换到他喜欢的语言。 不幸的是,我对此有一种奇怪的行为。 它看起来像这样:

我有一个切换语言的链接(onclick)。 这个 function 看起来像这样:

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”,否则会执行英语分支。 这看起来是对的。 但是当我到达我网站的任何 web 页面时(为了测试,我选择了索引站点)并执行

alert(document.cookie);

我突然在德国 web 页面“MYCOOKIE=EN”上得到了结果,尽管它应该是“MYCOOKIE=DE”,因为 function 跳到了正确的 IF 分支(其他分支)。 当我切换到英语时,我会在英语 web 页面“MYCOOKIE=DE;MYCOOKIE=EN”上得到结果。 于是突然出现了两个同名的cookies。 所以 cookies 的值不仅被反转,也没有被正确删除,而是完全废话。 任何人都可以解释导致这种行为的代码中有什么问题吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM