Установка cookie приводит к неожиданному поведению - PullRequest
3 голосов
/ 31 мая 2011


У меня есть многоязычный сайт с возможностью переключения между немецким и английским языками. Я хочу сохранить выбранный язык в файле 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 не просто инвертируются и не удаляются правильно, но полностью чушь. Кто-нибудь может объяснить, что не так в моем коде, что приводит к такому поведению?

1 Ответ

1 голос
/ 31 мая 2011

Убедитесь, что вы правильно указали путь к файлу 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=/'
...