Почему установка document.cookie не работает в Chrome?

Моя коллега столкнулась с проблемой, в которой NO cookie не может быть установлен в Chrome с помощью следующего кода:

document.cookie = "TEST=1; expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"

Поместите document.cookie в консоль сразу же после того, как вы увидите результаты, как будто я не сделал никаких изменений. При обновлении страницы cookie не было, поэтому он правильно сообщал, просто не устанавливая правильно.

Вышеприведенный код будет работать, если он откроет новое окно инкогнито и будет работать для всех остальных. Я удалил все его файлы cookie с помощью инструментов dev и все еще не успевал вручную устанавливать файлы cookie (хотя другие возвращались, которые были установлены через заголовки сервера).

Как только он перезапустил Chrome, он начал вести себя правильно, поэтому кажется, что он сталкивался с некоторой причудой или ошибкой, которую больше нельзя воспроизвести.

Кто-нибудь еще сталкивается с этим? На данный момент я собираюсь проверить, что document.cookie сообщает о том, что ожидается после настройки, а затем инициирует наш cookieless поток, когда пользователь отключил cookies, когда что-то не соответствует. Я ненавижу идею делать это, поэтому любые предложения и ответы будут замечательными.

Ответ 1

Способ работы cookie, по крайней мере в Chrome, немного странный.

Если вам нужно изменить значение cookie, вам нужно добавить/установить каждый ключ один за другим.

Попробуйте это в консоли:

document.cookie; // -> "expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"
document.cookie = 'TEST=1';
document.cookie; // -> "TEST=1; expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"

Да, он добавил ключ и не заменил весь файл cookie на TEST=1.

Если вам нужно удалить ключ, вы можете просто указать значение: TEST=.

Я надеюсь, что это выведет вас из кошмара в печенье (это было для меня).

Ответ 2

Как упоминалось другим пользователем, вы должны установить их один за другим. Эти функции могут быть полезны при разборе и применении строки cookie:

function clearCookies(){
    var cookies = document.cookie.split(';');
    for(i in cookies){
        var vals = cookies[i].split('=');
        var name = vals.shift(0, 1).trim();
        document.cookie = name+'=';
    }
}
function parseCookies(cookie){
    clearCookies();
    var cookies = cookie.split(';');
    for(i in cookies){
        var vals = cookies[i].split('=');
        var name = vals.shift(0, 1).trim();
        document.cookie = name+'='+vals.join('=');
    }
}

Ответ 3

Обязательно запустите его на сервере (по крайней мере, на локальном сервере), чтобы работал document.cookie.

Если вы локально запускаете этот файл в браузере. "document.cookie" не работает.