2012-05-15 4 views
94

Как удалить определенный файл cookie с именем roundcube_sessauth?Удалить файл cookie по имени?

Если не следующее:

function del_cookie(name) { 
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;'; 
} 

А потом:

<a href="javascript:del_cookie(name);">KILL</a> 

убить roundcube_sessauth печенье?

+0

Ну вы попробуете? – Gabe

+1

'имя'? В чем смысл? Или это похмелье из более универсальной версии, которая позволяет указать имя файла cookie? – paxdiablo

+0

Возможный дубликат [Как удалить все файлы cookie с помощью Javascript?] (Http://stackoverflow.com/questions/595228/how-can-i-delete-all-cookies-with-javascript) – Gabe

ответ

121

Чтобы удалить файл cookie, введите expires дату, чтобы что-то в прошлом. Функция, которая делает это.

var delete_cookie = function(name) { 
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 
}; 

Затем удалить куки с именем roundcube_sessauth просто сделать.

delete_cookie('roundcube_sessauth'); 
+0

Я чувствую, что это * должно * работать (похоже, что он должен работать: D!) , но я просматриваю файлы cookie, установленные моей страницей в firefox, и когда я нажимаю кнопку «KILL», cookie не удаляется. Любая идея почему? – Charlie

+0

Это работает в Google Chrome. Установите firebug и посмотрите, есть ли какие-либо ошибки. –

+1

Нет ошибок, я думаю, это просто не удаляет файл cookie в Roundcube. Вероятно, он удаляет другие файлы cookie. – Charlie

4

Я не совсем уверен, если это была ситуация с Roundcube версии с мая '12, но текущий ответ в том, что вы не можете удалить roundcube_sessauth печенье с JavaScript, так как он помечен как HttpOnly , Это означает, что он недоступен из кода на стороне клиента JS и может быть удален только скриптом на стороне сервера или прямым действием пользователя (через некоторые механизмы браузера, такие как встроенный отладчик или какой-либо плагин).

143

Вы должны определить путь, по которому существует куки для того, чтобы удалить реальный

function set_cookie(name, value) { 
    document.cookie = name +'='+ value +'; Path=/;'; 
} 
function delete_cookie(name) { 
    document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 
} 

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

Редактировать на основе комментария @Evan Morrison.
Помните, что в некоторых случаях для определения правильного файла cookie необходим параметр Domain.
Обычно используется как Domain=.yourdomain.com
Период перед доменным именем означает, что этот файл cookie может существовать в любом поддомене (www также считается поддоменем).

Также, как упоминалось в ответе @ RobertT, cookie HttpOnly не может быть удален с помощью JavaScript на стороне клиента.

+13

Это сводило меня с ума! После того, как я добавил Path = /, я смог удалить. Благодаря! – duyn9uyen

+4

тоже здесь, мне нужно было 'path = /;' для этого работать. – bobbyrne01

+9

Это должен быть правильный ответ, он не работает без «Пути» в большинстве случаев. – SuperMarco

3

// если прошло exMins = 0, он удалит, как только он его создаст.

function setCookie(cname, cvalue, exMins) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exMins*60*1000)); 
    var expires = "expires="+d.toUTCString(); 
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 
} 

setCookie('cookieNameToDelete','',0) // this will delete the cookie. 
+0

exMins не определен в этом примере, вы, вероятно, имели в виду exdays – BHBH

+0

Да, вместо этого переименуйте аргумент exdays в exMins .. спасибо #BhBh –

1

setCookie('cookienameToDelete','',0) работает для меня

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/18694016) – abigperson

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