Установка 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=/'