Очистка всех куки с помощью JavaScript - PullRequest
238 голосов
/ 07 октября 2008

Как удалить все файлы cookie для текущего домена с помощью JavaScript?

Ответы [ 18 ]

2 голосов
/ 11 мая 2018

Я не знаю, почему первый проголосовавший ответ не работает для меня.

Как этот ответ сказал:

Нет 100% решения для удаления файлов cookie браузера.

Проблема в том, что файлы cookie однозначно идентифицируются не только по ключу «имя», но также по «домену» и «пути».

Не зная «домен» и «путь» куки, вы не можете надежно удалить его. Эта информация не доступна через JavaScript document.cookie. Он также недоступен через заголовок HTTP Cookie!

Так что моя идея состоит в том, чтобы добавить контроль версий Cookie с полным набором настроек, получения, удаления куки:

var cookie_version_control = '---2018/5/11';

function setCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name+cookie_version_control + "=" + (value || "")  + expires + "; path=/";
}

function getCookie(name) {
    var nameEQ = name+cookie_version_control + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function removeCookie(name) {   
    document.cookie = name+cookie_version_control+'=; Max-Age=-99999999;';  
}
2 голосов
/ 07 октября 2008

Вы можете получить список, посмотрев в переменную document.cookie. Очистка их всех - это просто цикл по всем из них и очистка их один за другим.

1 голос
/ 13 января 2017

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

Пожалуйста, помогите исправить по мере необходимости, но я собираюсь бросить здесь свои 2 цента. Следующий метод разбивает все на части и в основном строит строку значения файла cookie на основе обеих частей настроек, а также включает пошаговую сборку строки пути, начиная, конечно, с /.

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

;(function() {
    if (!window['deleteAllCookies'] && document['cookie']) {
        window.deleteAllCookies = function(showLog) {
            var arrCookies = document.cookie.split(';'),
                arrPaths = location.pathname.replace(/^\//, '').split('/'), //  remove leading '/' and split any existing paths
                arrTemplate = [ 'expires=Thu, 01-Jan-1970 00:00:01 GMT', 'path={path}', 'domain=' + window.location.host, 'secure=' ];  //  array of cookie settings in order tested and found most useful in establishing a "delete"
            for (var i in arrCookies) {
                var strCookie = arrCookies[i];
                if (typeof strCookie == 'string' && strCookie.indexOf('=') >= 0) {
                    var strName = strCookie.split('=')[0];  //  the cookie name
                    for (var j=1;j<=arrTemplate.length;j++) {
                        if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
                        else {
                            var strValue = strName + '=; ' + arrTemplate.slice(0, j).join('; ') + ';';  //  made using the temp array of settings, putting it together piece by piece as loop rolls on
                            if (j == 1) document.cookie = strValue;
                            else {
                                for (var k=0;k<=arrPaths.length;k++) {
                                    if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
                                    else {
                                        var strPath = arrPaths.slice(0, k).join('/') + '/'; //  builds path line 
                                        strValue = strValue.replace('{path}', strPath);
                                        document.cookie = strValue;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            showLog && window['console'] && console.info && console.info("\n\tCookies Have Been Deleted!\n\tdocument.cookie = \"" + document.cookie + "\"\n");
            return document.cookie;
        }
    }
})();
1 голос
/ 07 июля 2016

Функциональный подход + ES6

const cookieCleaner = () => {
  return document.cookie.split(";").reduce(function (acc, cookie) {
    const eqPos = cookie.indexOf("=");
    const cleanCookie = `${cookie.substr(0, eqPos)}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;`;
    return `${acc}${cleanCookie}`;
  }, "");
}

Примечание: не обрабатывает пути

1 голос
/ 04 июля 2016

Вот простой код для удаления всех файлов cookie в JavaScript .

function deleteAllCookies(){
   var cookies = document.cookie.split(";");
   for (var i = 0; i < cookies.length; i++)
     deleteCookie(cookies[i].split("=")[0]);
}

function setCookie(name, value, expirydays) {
 var d = new Date();
 d.setTime(d.getTime() + (expirydays*24*60*60*1000));
 var expires = "expires="+ d.toUTCString();
 document.cookie = name + "=" + value + "; " + expires;
}

function deleteCookie(name){
  setCookie(name,"",-1);
}

Запустите функцию deleteAllCookies(), чтобы очистить все куки.

0 голосов
/ 06 июля 2017

Jquery:

var cookies = $.cookie();
for(var cookie in cookies) {
$.removeCookie(cookie);
}

ваниль JS

function clearListCookies()
{   
 var cookies = document.cookie.split(";");
 for (var i = 0; i < cookies.length; i++)
  {   
    var spcook =  cookies[i].split("=");
    deleteCookie(spcook[0]);
  }
  function deleteCookie(cookiename)
   {
    var d = new Date();
    d.setDate(d.getDate() - 1);
    var expires = ";expires="+d;
    var name=cookiename;
    //alert(name);
    var value="";
    document.cookie = name + "=" + value + expires + "; path=/acc/html";                    
}
window.location = ""; // TO REFRESH THE PAGE
}
0 голосов
/ 28 февраля 2016

Я нашел проблему в IE и Edge. Браузеры Webkit (Chrome, Safari) кажутся более щадящими. При настройке файлов cookie всегда устанавливайте «путь» к чему-либо, поскольку по умолчанию будет использоваться страница, на которой установлен файл cookie. Поэтому, если вы попытаетесь удалить его на другой странице без указания «пути», путь не будет совпадать и он не истечет. Значение document.cookie не показывает путь или срок действия файла cookie, поэтому вы не можете определить, где был установлен файл cookie, посмотрев на значение.

Если вам нужно удалить файлы cookie с разных страниц, сохраните путь к странице настроек в значении cookie, чтобы вы могли извлечь его позже или всегда добавить "; path=/;" к значению cookie. Тогда срок его действия истечет с любой страницы.

0 голосов
/ 13 августа 2015
//Delete all cookies
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:01 GMT;' +
            'path=' + '/;' +
            'domain=' + window.location.host + ';' +
            'secure=;';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...