Установка 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() + ";";
   }
}

Firebug говорит, что он переходит в правую IF-ветку, поэтому, когда я нажимаю "German", эта часть будет исполнена "MYCOOKIE=DE", иначе - английская ветвь. Это выглядит правильно. Но когда я попадаю на любую веб-страницу моего сайта (для тестирования я выбрал индексный сайт) и выполняю

alert(document.cookie);

Я неожиданно получаю результат на немецкой веб-странице "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=/'
Другие вопросы по тегам