Удалить куки по имени?

151

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

Не следует следующее:

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печенье?

Чарли
источник
1
name? Какой в ​​этом смысл? Или это похмелье от более универсальной версии, которая позволяет указать имя файла cookie?
paxdiablo
Не думай, что это обман. В частности, спрашивается об очистке всех файлов cookie.
paxdiablo
1
Я не хочу удалять все куки ... Только один. Я нашел основной код от поиска в Google. И конечно я попробовал это. @Paxdiablo Я предположил, что это имя файла cookie, но я могу ошибаться.
Чарли
@paxdiablo - ...How can I delete a specific cookie
Дерек 朕 會 功夫
1
@ Дерек и др., Вы, кажется, неправильно поняли. Я заявлял, что предложенный обман от Гейба вовсе не был обманом, потому что предложенный обман спросил об удалении всех файлов cookie, а этот вопрос - об удалении определенного файла cookie. Я не жаловался на этот вопрос в любом случае, форме или форме :-)
paxdiablo

Ответы:

252

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

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, находясь на другой странице, другой файл cookie продолжит свое существование.

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

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

EMII
источник
23
Это сводило меня с ума! После того, как я добавил Path = /, я смог удалить. Спасибо!
duyn9uyen
12
Это должен быть правильный ответ, Pathв большинстве случаев он не работает .
СуперМарко
9
Я не смог удалить cookie, пока не добавил путь и правильное значение 'Domain = value; «... Итак, мое заявление было таким: document.cookie =" cookieName =; path = /; expires = Чт, 01 января 1970 г. 00:00:01 GMT; домен = .myDomain.com "
Эван Моррисон
1
Это решение все еще работает, но его можно написать несколько более кратко Max-Age=0, если вы заботитесь о таких вещах.
MaxPRafferty
181

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

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

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

delete_cookie('roundcube_sessauth');
paxdiablo
источник
1
Я чувствую, что это должно работать (похоже, это должно работать: D!), Но я просматриваю файлы cookie, установленные моей страницей в Firefox, и когда я нажимаю кнопку «KILL», файл cookie не удаляется. Есть идеи почему?
Чарли
Это работает в Google Chrome. Установите firebug и посмотрите, нет ли ошибок.
1
Нет ошибок, я думаю, что это просто не удалить куки в Roundcube. Это, вероятно, удаляет другие куки просто отлично.
Чарли
39
Для пользователей, которые ищут ответ на этот вопрос, см. Ответ ниже. path=/Ключ имеет важное значение для совместимости браузера.
bencripps
2
Этот ответ не работал для меня в Chrome, не пробовал в Firefox. Но ответ Эмии ниже сработал.
Даниэль Ф
11

// если передано 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.
Кишор Патил
источник
exMins не определен в этом примере, вы, вероятно, имели в виду exdays
bhurlow
Да ... вместо этого переименуйте аргументы exdays в exMins .. спасибо #BhBh
Кишор Патил
7

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

Robertt
источник
1

Вы можете попробовать это решение

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;
Нафис
источник
0

В моем случае я использовал код удара для другой среды.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
Амир Мовахеди
источник