2016-03-20 3 views
1

Тестирование в Firefox и Safari, я пробовал обе следующие строки. Каждый устанавливает cookie, но ни один из подходов не истекает после того, как я закрыл (затем снова открыл) браузер. В информации о файлах cookie браузера указано, что «test» установлен на expire «В конце сеанса», но этого не происходит.Cookie, установленный через js, который истекает, когда браузер закрывается, не истекает

Есть несколько подобных сообщений об этом (например, When does a cookie with expiration time 'At end of session' expire?), но ничто не помогло или не установило cookie с помощью javascript, как будто я делаю.

// не может истечь после закрытия браузера

document.cookie = "тест = 1; истекает = 0; путь = /";

// не может истечь после закрытия браузера

document.cookie = "тест = 1; путь = /";

+0

Это интересно. Возможно, это связано с некоторыми настройками безопасности контента, например, cookie был первоначально установлен в заголовке ответа сервера, и был установлен флаг «httpOnly». Ваш сервер отправляет заголовки set-cookie? – lxe

+0

@ lxe Это на самом деле оказалось довольно глупым. Я не понимал, что, когда вы «закрываете» браузер на Mac, все еще сохраняется процесс браузера. Вы должны явно выйти из браузера. Как только я это сделал, cookie исчез. –

ответ

0

Тег expires хочет получить UTC-Datestring. Вы можете просто использовать некоторые простые функции, которые я написал:

setCookie = function(attrib, value, exp_days) { 
    var dt = new Date(); 
    dt.setTime(dt.getTime() + (exp_days*86400000)); // Convert days to ms 
    document.cookie = attrib + "=" + value + "; expires=" + dt.toUTCString(); // add attrib=value to the cookie and set an expiration date 
} 

getCookie = function(attrib){ 
    var split_cookie = document.cookie.split("; "); 
    attrib+="="; 
    for(var i=0; i<split_cookie.length; i++) 
    if(~split_cookie[i].indexOf(attrib)) // if the attribute is somewhere in the cookie string 
    // im using an ugly bitflip operator here, it could as well be an if(...!=-1) 
     return split_cookie[i].substring(attrib.length + split_cookie[i].indexOf(attrib),split_cookie[i].length); 
    return ""; 
} 

removeCookie = function(attrib){ 
    setCookie(attrib, "", -1); 
} 

Если вы используете функцию removeCookie(), значение Attrib будет удален, если текущая страница остается.

+0

Спасибо. К сожалению, тот же результат. Для чего нужно установить значение exp_days, если я хочу, чтобы он истекал, когда браузер закрывается? Я пробовал 0, 1, -1 и оставил его пустым. Что касается функции removeCookie, я не хочу явно удалять что-либо. Не следует ли автоматически закрыть окно браузера «удаление» для меня? Одна вещь - теперь я вижу, что даже после закрытия браузеров они продолжают работать. Только после того, как я убью этот процесс, я обнаружил, что файлы cookie, наконец, истекли. Итак, возникает вопрос: существует ли настройка браузера, которая заставляет сеанс/процесс сохраняться? –

+0

Обновление: открытые процессы были из-за того, что я нахожусь на Mac, что оставляет их открытыми после закрытия браузера. Итак, мой единственный оставшийся вопрос снова: что именно должно быть установлено для exp_days, если я хочу, чтобы он истекал, когда браузер закрывается? Я замечаю число, подобное 31572500, но почему? Если 1 означает, что он истекает завтра, то не должно истечь 31572500 31572500 дней, а не в конце сеанса? –

+0

Cookie удаляется, когда его значение ложно ("") или когда достигнуто значение expires. removeCookie делает все это, поэтому cookie будет уходить при перезагрузке страницы (-1 означает вчера, поэтому он будет передан. Я не уверен, почему работает 31572500, если это не переполнение, это, вероятно, просто приведет к недействительности Дата). – Chemistree

0

Я не понимал, что когда вы «закрываете» браузер на Mac, все еще сохраняется процесс браузера. Вы должны явно выйти из браузера. Как только я это сделал, cookie исчез.

Смежные вопросы