Antworten:
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 aufweist:
HttpOnly
gesetztem Flag werden nicht gelöscht , da das HttpOnly
Flag den Zugriff von Javascript auf das Cookie deaktiviert.Path
Wert gesetzt wurden, werden nicht gelöscht . (Dies trotz der Tatsache, dass diese Cookies in angezeigt werden document.cookie
, aber Sie können sie nicht löschen, ohne denselben Path
Wert anzugeben , mit dem sie festgelegt wurden.)trim()
zusätzlichen Speicherplatz oder split('; ')
(durch ';') benötigen, damit es ordnungsgemäß funktioniert. Ich habe eine Bearbeitung vorgeschlagen.
Für den Fall, dass Sie es schnell einfügen möchten ...
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
Und der Code für ein Lesezeichen:
javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();
localStorage
, window.localStorage.clear()
können ebenfalls hilfreich sein
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();
}
}
})();
Nach ein wenig Frustration habe ich diese Funktion zusammengeschaltet, die versucht, ein benanntes Cookie aus allen Pfaden zu löschen. Rufen Sie dies einfach für jedes Ihrer Cookies auf und Sie sollten näher daran sein, jedes Cookie zu löschen, als Sie es zuvor 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 unterschiedliche Verhaltensweisen, aber das hat bei mir funktioniert. Genießen.
Wenn Sie Zugriff auf das Plugin jquery.cookie haben , können Sie alle Cookies folgendermaßen löschen:
for (var it in $.cookie()) $.removeCookie(it);
Soweit ich weiß, gibt es keine Möglichkeit, Cookies in der Domain pauschal zu löschen. Sie können ein Cookie löschen, wenn Sie den Namen kennen und sich das Skript in derselben Domäne wie das Cookie befindet.
Sie können den Wert auf leer und das Ablaufdatum auf irgendwo in der Vergangenheit setzen:
var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString();
Es gibt hier einen ausgezeichneten Artikel über die Manipulation von Cookies mit Javascript.
document.cookie="username;expires=" + new Date(0).toGMTString()
- kein großer Unterschied, wenn der Cookie vor 1 Sekunde oder 1970 abläuft
Einfacher. Schneller.
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";
}
Eine Antwort, die sowohl von der zweiten Antwort hier als auch von W3Schools beeinflusst wird
document.cookie.split(';').forEach(function(c) {
document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});
Scheint zu funktionieren
edit: wow fast genau das gleiche wie zachs interessant, wie Stack Overflow sie nebeneinander stellt.
edit: nvm das war anscheinend nur vorübergehend
Ich dachte, ich würde diese Methode zum Löschen von Cookies teilen. Vielleicht kann es irgendwann für jemand anderen hilfreich sein.
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;';
}
Ich weiß nicht, warum die erste Antwort bei mir nicht funktioniert.
Wie diese Antwort sagte:
Es gibt keine 100% ige Lösung zum Löschen von Browser-Cookies.
Das Problem ist, dass Cookies nicht nur anhand ihres Schlüssels "Name", sondern auch anhand ihrer "Domain" und ihres "Pfades" eindeutig identifiziert werden.
Ohne die "Domain" und den "Pfad" eines Cookies zu kennen, können Sie es nicht zuverlässig löschen. Diese Informationen sind nicht über JavaScript document.cookie verfügbar. Es ist auch nicht über den HTTP-Cookie-Header verfügbar!
Meine Idee ist es also, eine Cookie-Versionskontrolle mit allen Einstellungen hinzuzufügen, Cookies abzurufen und zu entfernen:
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;';
}
let expireTime = now.getTime();
now.setTime(expireTime);
document.cookie =document.cookie+';expires='+now.toUTCString()+';path=/';
werden die Cookies entfernt.
Ich habe ein ausgefeilteres und OOP-orientiertes Cookie-Steuermodul. Es enthält auch eine deleteAll
Methode zum Löschen aller vorhandenen Cookies. Beachten Sie, dass diese Version der deleteAll
Methode Einstellungen enthält path=/
, die das Löschen aller Cookies in der aktuellen Domain bewirken. Wenn Sie Cookies nur aus einem bestimmten Bereich löschen müssen, müssen Sie diese Methode aktualisieren, um Dynamik hinzuzufügenpath
Parameter .
Es gibt Hauptklasse Cookie
:
import {Setter} from './Setter';
export class Cookie {
/**
* @param {string} key
* @return {string|undefined}
*/
static get(key) {
key = key.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1');
const regExp = new RegExp('(?:^|; )' + key + '=([^;]*)');
const matches = document.cookie.match(regExp);
return matches
? decodeURIComponent(matches[1])
: undefined;
}
/**
* @param {string} name
*/
static delete(name) {
this.set(name, '', { expires: -1 });
}
static deleteAll() {
const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const index = cookie.indexOf('=');
const name = ~index
? cookie.substr(0, index)
: cookie;
document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
}
}
/**
* @param {string} name
* @param {string|boolean} value
* @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
*/
static set(name, value, opts = {}) {
Setter.set(name, value, opts);
}
}
Die Cookie-Setter-Methode ( Cookie.set
) ist ziemlich komplex, daher habe ich sie in eine andere Klasse zerlegt. Es gibt Code von diesem:
export class Setter {
/**
* @param {string} name
* @param {string|boolean} value
* @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
*/
static set(name, value, opts = {}) {
value = Setter.prepareValue(value);
opts = Setter.prepareOpts(opts);
let updatedCookie = name + '=' + value;
for (let i in opts) {
if (!opts.hasOwnProperty(i)) continue;
updatedCookie += '; ' + i;
const value = opts[i];
if (value !== true)
updatedCookie += '=' + value;
}
document.cookie = updatedCookie;
}
/**
* @param {string} value
* @return {string}
* @private
*/
static prepareValue(value) {
return encodeURIComponent(value);
}
/**
* @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
* @private
*/
static prepareOpts(opts = {}) {
opts = Object.assign({}, opts);
let {expires} = opts;
if (typeof expires == 'number' && expires) {
const date = new Date();
date.setTime(date.getTime() + expires * 1000);
expires = opts.expires = date;
}
if (expires && expires.toUTCString)
opts.expires = expires.toUTCString();
return opts;
}
}
Hier ist ein einfacher Code zum Löschen aller Cookies in 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);
}
Führen Sie die Funktion aus deleteAllCookies()
, um alle Cookies zu löschen.
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}`;
}, "");
}
Hinweis: Behandelt keine Pfade
//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=;';
}
}
Nachdem ich fast alle Methoden getestet hatte, die in mehreren Browserstilen für mehrere Cookie-Stile aufgeführt waren, stellte ich fest, dass hier fast nichts funktioniert, selbst wenn sie zu 50% funktionieren.
Bitte helfen Sie bei Bedarf zu korrigieren, aber ich werde meine 2 Cent hier reinwerfen. Die folgende Methode zerlegt alles und erstellt im Wesentlichen die Cookie-Wertzeichenfolge, die sowohl auf den Einstellungselementen als auch auf einer schrittweisen Erstellung der Pfadzeichenfolge basiert, beginnend mit/
natürlich mit.
Ich hoffe, dies hilft anderen und ich hoffe, dass jede Kritik in Form einer Perfektionierung dieser Methode auftreten kann. Zuerst wollte ich einen einfachen 1-Liner, wie einige andere suchten, aber JS-Cookies sind eines der Dinge, mit denen man nicht so einfach umgehen kann.
;(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;
}
}
})();
Jquery:
var cookies = $.cookie();
for(var cookie in cookies) {
$.removeCookie(cookie);
}
Vanille 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
}
Ich habe ein Problem in IE und Edge gefunden. Webkit-Browser (Chrome, Safari) scheinen verzeihender zu sein. Stellen Sie beim Setzen von Cookies immer den "Pfad" auf etwas ein, da die Standardeinstellung die Seite ist, auf der das Cookie gesetzt wird. Wenn Sie also versuchen, es auf einer anderen Seite abzulaufen, ohne den "Pfad" anzugeben, stimmt der Pfad nicht überein und er läuft nicht ab. Dasdocument.cookie
Wert zeigt weder den Pfad noch den Ablauf für ein Cookie an. Sie können also nicht anhand des Werts ableiten, wo das Cookie gesetzt wurde.
Wenn Sie Cookies von verschiedenen Seiten ablaufen lassen müssen, speichern Sie den Pfad der Einstellungsseite im Cookie-Wert, damit Sie ihn später herausziehen oder immer "; path=/;"
an den Cookie-Wert anhängen können. Dann läuft es von jeder Seite ab.
name = ""
stattdessen den namenlosen Wert löschen.