Невозможно удалить куки из JavaScript - PullRequest
20 голосов
/ 16 апреля 2011

Я нахожусь на внешнем сайте и пытаюсь удалить cookie через javascript.

В консоли я сделал следующее:

function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

deleteAllCookies()

, который должен установить срок действия файла cookie документа в 1970

Но после этого я звоню

document.cookie.split(";")

Печенье, казалось бы, нетронутым. Есть идеи почему?

PS: приведенный выше код взят из stackoverflow Очистка всех файлов cookie с помощью JavaScript

Ответы [ 5 ]

42 голосов
/ 24 января 2015

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

Другими словами:

 document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=[something];"

что значение "что-то" должно совпадать с тем, что установили существующие куки.

Отладчики JS могут не предоставлять вам подробную информацию о том, каков путь и домен, но станет очевидно, какой из них вам не подходит, если вы посмотрите значение существующего cookie в настройках Chrome-> или на аналогичной панели. в Firefox / Safari / IE.

Дайте мне знать, если это поможет.

20 голосов
/ 07 января 2012

У меня была такая же проблема. Я обнаружил, что cookie был установлен под пустым поддоменом, например, домен cookie был «.domain.com», а мой веб-сайт размещался по адресу «sub.domain.com».

Чтобы исправить, я добавил домен cookie к установленному значению

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.domain.com";

Чтобы узнать, на какой домен настроен файл cookie, откройте в Chrome инструменты разработчика -> ресурсы -> файлы cookie и посмотрите поля домена.

1 голос
/ 23 февраля 2018

У меня была похожая проблема при попытке удалить определенные куки. Иногда это работало:

document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;';

... а иногда и нет.

Просмотрев Chrome Inspector (вкладка «Приложения» -> «Боковая панель хранилища» -> «Файлы cookie»), я заметил, что некоторые файлы cookie были установлены в разных доменах. Пример:

.mydoamin.com
sub.mydomain.com 

Итак, мое решение состояло в том, чтобы создать универсальную функцию, которая удаляет cookie из всех доменов.

var deleteCookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=.mydomain.com;';
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=sub.mydomain.com;';
};

0 голосов
/ 26 января 2018

Очистить сеансовые куки в ie11?

Может быть, ссылка выше может помочь

Просто запустите JavaScript, как показано ниже

document.execCommand("ClearAuthenticationCache")

Я пытался, и печенье было очищено.

0 голосов
/ 04 ноября 2017

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

javascript: (function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";domain=." + location.host.split('.').slice(-2).join(".") +";path=/"); }); })();

Обратите внимание, что я заменяю "domain.com" на location.host.split ('.'). Slice (-2) .join ("."), Чтобы я всегда получал доменное имя без поддоменов, т.е. почты. google.com станет google.com. при установке срока действия cookie мы должны игнорировать поддомен (по крайней мере, в моем случае это было так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...