437 Stimmen

Löschung aller Cookies mit JavaScript

Wie löscht man mit JavaScript alle Cookies für die aktuelle Domain?

449voto

Robert J. Walker Punkte 9453
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";
    }
}

Beachten Sie, dass dieser Code zwei Einschränkungen hat:

  • Es werden keine Cookies gelöscht mit HttpOnly Flagge gesetzt, da die HttpOnly Flagge deaktiviert den Zugriff von Javascript auf den Cookie.
  • Es werden keine Cookies gelöscht, die mit einer Path Wert. (Dies gilt trotz der Tatsache, dass diese Cookies in document.cookie aber Sie können es nicht löschen, ohne dass Sie dasselbe angeben Path Wert, mit dem er eingestellt wurde).

205voto

Craig Smedley Punkte 2198

Einzeiler

Für den Fall, dass Sie es schnell einfügen wollen...

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

Und der Code für ein Bookmarklet :

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

164voto

Jan Punkte 5370

Und hier ist eine, um alle Cookies in allen Pfaden und allen Varianten der Domain (www.mydomain.com, mydomain.com usw.) zu löschen:

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

81voto

AnthonyVO Punkte 3483

Nachdem ich selbst ein wenig frustriert war, habe ich diese Funktion entwickelt, die versucht, ein benanntes Cookie aus allen Pfaden zu löschen. Rufen Sie diese Funktion einfach für jedes Ihrer Cookies auf und Sie sollten dem Löschen jedes Cookies näher sein, als Sie es vorher waren.

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 + ';';
    }
}

Wie immer haben verschiedene Browser ein unterschiedliches Verhalten, aber bei mir hat es funktioniert. Viel Spaß!

16voto

Slavik Meltser Punkte 8270

Der folgende Code entfernt alle Cookies innerhalb der aktuellen Domain und aller nachfolgenden Subdomains ( www.some.sub.domain.com , .some.sub.domain.com , .sub.domain.com und so weiter.).

Eine einzeilige Vanilla-JS-Version (ich glaube, die einzige hier ohne die Verwendung von cookie.split() ) :

document.cookie.replace(/(?<=^|;).+?(?=\=|;|$)/g, name => location.hostname.split('.').reverse().reduce(domain => (domain=domain.replace(/^\.?[^.]+/, ''),document.cookie=`${name}=;max-age=0;path=/;domain=${domain}`,domain), location.hostname));

Dies ist eine lesbare Version dieser einzigen Zeile:

document.cookie.replace(
  /(?<=^|;).+?(?=\=|;|$)/g, 
  name => location.hostname
    .split(/\.(?=[^\.]+\.)/)
    .reduceRight((acc, val, i, arr) => i ? arr[i]='.'+val+acc : (arr[i]='', arr), '')
    .map(domain => document.cookie=`${name}=;max-age=0;path=/;domain=${domain}`)
);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X