Wie löscht man mit JavaScript alle Cookies für die aktuelle Domain?
Antworten
Zu viele Anzeigen?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 dieHttpOnly
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 indocument.cookie
aber Sie können es nicht löschen, ohne dass Sie dasselbe angebenPath
Wert, mit dem er eingestellt wurde).
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=/"); }); })();
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();
}
}
})();
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ß!
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}`)
);
- See previous answers
- Weitere Antworten anzeigen