Очистка всех файлов cookie с помощью JavaScript

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

Ответ 1

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";
    }
}

Обратите внимание, что этот код имеет два ограничения:

  • Он не будет удалять файлы cookie с установленным флагом HttpOnly, поскольку флаг HttpOnly отключает доступ к файлу cookie Javascript.
  • Он не будет удалять файлы cookie, которые были установлены с помощью значения Path. (Это несмотря на то, что эти файлы cookie будут отображаться в document.cookie, но вы не можете удалить его, не указав одно и то же значение Path, с которым оно было установлено.)

Ответ 2

Один вкладыш

Если вы хотите быстро вставить его...

document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });

И код для букмарклета:

javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();

Ответ 3

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

function eraseCookieFromAllPaths(name) {
    // This function will attempt to remove a cookie from all paths.
    var pathBits = location.pathname.split('/');
    var pathCurrent = ' path=';

    // do a simple pathless delete first.
    document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;';

    for (var i = 0; i < pathBits.length; i++) {
        pathCurrent += ((pathCurrent.substr(-1) != '/') ? '/' : '') + pathBits[i];
        document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;' + pathCurrent + ';';
    }
}

Как всегда, разные браузеры имеют другое поведение, но это сработало для меня. Наслаждайтесь.

Ответ 4

Если у вас есть доступ к плагину jquery.cookie, вы можете стереть все файлы cookie таким образом:

for (var it in $.cookie()) $.removeCookie(it);

Ответ 5

И здесь один, чтобы очистить все файлы cookie во всех путях и во всех вариантах домена (www.mydomain.com, mydomain.com и т.д.):

(function () {
    var cookies = document.cookie.split("; ");
    for (var c = 0; c < cookies.length; c++) {
        var d = window.location.hostname.split(".");
        while (d.length > 0) {
            var cookieBase = encodeURIComponent(cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path=';
            var p = location.pathname.split('/');
            document.cookie = cookieBase + '/';
            while (p.length > 0) {
                document.cookie = cookieBase + p.join('/');
                p.pop();
            };
            d.shift();
        }
    }
})();

Ответ 6

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

Вы можете установить значение пустым и дату истечения срока годности где-то в прошлом:

var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString(); 

Здесь отличная статья здесь о манипулировании файлами cookie с помощью javascript.

Ответ 7

Simpler. Быстрее.

function deleteAllCookies() {
 var c = document.cookie.split("; ");
 for (i in c) 
  document.cookie =/^[^=]+/.exec(c[i])[0]+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";    
}

Ответ 8

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

var cookie = document.cookie.split(';');

for (var i = 0; i < cookie.length; i++) {

    var chip = cookie[i],
        entry = chip.split("="),
        name = entry[0];

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

Ответ 9

Ответ под влиянием обоих вторых ответов здесь и W3Schools

document.cookie.split(';').forEach(function(c) {
  document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});

Кажется, работает

edit: wow почти точно так же, как Zach интересно, как Qaru ставит их рядом друг с другом.

edit: nvm, который был временным, по-видимому,

Ответ 10

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

Ответ 11

Вот простой код удалить все файлы 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(), чтобы удалить все файлы cookie.

Ответ 12

Функциональный подход + 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}`;
  }, "");
}

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

Ответ 13

//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=;';
    }
}

Ответ 14

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

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

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

;(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;
        }
    }
})();

Ответ 15

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
}

Ответ 16

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

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