Wie lösche ich ein Cookie?

338

Ist meine Funktion zum Erstellen eines Cookies korrekt? Wie lösche ich das Cookie zu Beginn meines Programms? Gibt es eine einfache Codierung?

function createCookie(name,value,days)
function setCookie(c_name,value,1) {
  document.cookie = c_name + "=" +escape(value);
}

setCookie('cookie_name',mac);

function eraseCookie(c_name) {
  createCookie(cookie_name,"",-1);
}
Kennedy
quelle
1
w3schools hat gute Funktionen für Cookies w3schools.com/js/js_cookies.asp . Sie können setCookie('name', 'value', 0)damit ein Cookie löschen.
Pete

Antworten:

341

Versuche dies:

function delete_cookie( name, path, domain ) {
  if( get_cookie( name ) ) {
    document.cookie = name + "=" +
      ((path) ? ";path="+path:"")+
      ((domain)?";domain="+domain:"") +
      ";expires=Thu, 01 Jan 1970 00:00:01 GMT";
  }
}

Oder:

function delete_cookie( name ) {
  document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Sie können Folgendes definieren get_cookie():

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}
ACP
quelle
2
Wie stelle ich eine Funktion ein und überprüfe, was meine Cookies sind und ob sie noch ablaufen?
Kennedy
61
get_cookie ist nicht definiert
Kreker
9
Die zweite Version der Funktion funktioniert nicht mehr. Siehe jsfiddle jsfiddle.net/b27Lgxgf/1 . Ansatz in @Lucas Beantwortungsarbeiten
Tasos K.
6
Wie soll das funktionieren? JavaScript hat keine eingebaute get_cookie()Funktion.
Michał Perłakowski
4
@ MichałPerłakowski Ich bin mir ziemlich sicher, dass es nur als Platzhalter / Verweis auf eine tatsächliche Funktion gedacht war, die Sie an anderer Stelle definieren würden.
JSeligsohn
113

Hier ein guter Link zum Quirksmode .

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 + "=" + (value || "")  + expires + "; path=/";
}
function getCookie(name) {
    var nameEQ = name + "=";
    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 eraseCookie(name) {   
    document.cookie = name+'=; Max-Age=-99999999;';  
}
Luca Matteis
quelle
20
Hinweis: toGMTString wurde zugunsten vontoUTCString
drzaus
4
Hinweis: Falls dies nicht funktioniert, stellen Sie sicher, dass pathes korrekt ist. Siehe: Entwickler.google.com/web/tools/chrome-devtools/manage-data/…
Gayan Weerakutti
Domain sollte hinzugefügt werden.
Michael Kapustey
3
Beachten Sie auch, dass sowohl Pfad als auch Domäne korrekte Werte haben müssen.
Esko
Getestet, funktioniert auch in WKWebView einwandfrei, bevor die Seite geladen wird. Gute Arbeit bei der Lösung.
PashaN
31

würde das funktionieren

function eraseCookie(name) {
    document.cookie = name + '=; Max-Age=0'
}

Ich weiß, Max-Agedass das Cookie beim Erstellen des Cookies ein Sitzungscookie im IE ist. Ich bin mir nicht sicher, wie es beim Löschen von Cookies funktioniert.

Collin Anderson
quelle
17

Sie können dies tun, indem Sie das Ablaufdatum auf gestern setzen.

Das Setzen auf "-1" funktioniert nicht. Das kennzeichnet einen Cookie als Sessioncookie.

Markus Nordhaus
quelle
Ihr Beispiel funktioniert nicht, wenn Sie ein Cookie auf einer anderen Seite setzen und versuchen, es von einer anderen Seite zu löschen. Das Set funktioniert, kann es aber nicht löschen.
Chovy
2
Am Ende habe ich Folgendes
Dies ist ein guter Ansatz, außer ... setzen Sie einfach die Ablaufzeit auf Null. Das führt zu einem sofortigen Ablauf und ist für niemanden verwirrend ("Warum hat der Entwickler die Ablaufzeit auf gestern gesetzt? War das ein Fehler, wollten sie eine Lebensdauer von einem Tag?"). Schreiben Sie Code, damit er sinnvoller ist und Ihr Leben auf der ganzen Linie weniger verwirrend wird. Dies ist heutzutage eine unterbewertete Philosophie beim Codieren ... Selbst MDN schlägt vor, die Ablaufzeit auf Null zu setzen, um ein Cookie zu löschen.
Dudewad
16

Hier ist eine Implementierung einer Funktion zum Löschen von Cookies mit Unicode-Unterstützung von Mozilla:

function removeItem(sKey, sPath, sDomain) {
    document.cookie = encodeURIComponent(sKey) + 
                  "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + 
                  (sDomain ? "; domain=" + sDomain : "") + 
                  (sPath ? "; path=" + sPath : "");
}

removeItem("cookieName");

Wenn Sie AngularJs verwenden, versuchen Sie es mit $ cookies.remove (darunter wird ein ähnlicher Ansatz verwendet ):

$cookies.remove('cookieName');
Vitalii Fedorenko
quelle
10

Um ein Cookie zu löschen, setze ich es erneut mit einem leeren Wert und läuft in 1 Sekunde ab. Im Detail verwende ich immer eine der folgenden Geschmacksrichtungen (ich bevorzuge eher die zweite):

1.

    function setCookie(key, value, expireDays, expireHours, expireMinutes, expireSeconds) {
        var expireDate = new Date();
        if (expireDays) {
            expireDate.setDate(expireDate.getDate() + expireDays);
        }
        if (expireHours) {
            expireDate.setHours(expireDate.getHours() + expireHours);
        }
        if (expireMinutes) {
            expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
        }
        if (expireSeconds) {
            expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
        }
        document.cookie = key +"="+ escape(value) +
            ";domain="+ window.location.hostname +
            ";path=/"+
            ";expires="+expireDate.toUTCString();
    }

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

Verwendungszweck:

setCookie("reminder", "buyCoffee", null, null, 20);
deleteCookie("reminder");

2

    function setCookie(params) {
        var name            = params.name,
            value           = params.value,
            expireDays      = params.days,
            expireHours     = params.hours,
            expireMinutes   = params.minutes,
            expireSeconds   = params.seconds;

        var expireDate = new Date();
        if (expireDays) {
            expireDate.setDate(expireDate.getDate() + expireDays);
        }
        if (expireHours) {
            expireDate.setHours(expireDate.getHours() + expireHours);
        }
        if (expireMinutes) {
            expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
        }
        if (expireSeconds) {
            expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
        }

        document.cookie = name +"="+ escape(value) +
            ";domain="+ window.location.hostname +
            ";path=/"+
            ";expires="+expireDate.toUTCString();
    }

    function deleteCookie(name) {
        setCookie({name: name, value: "", seconds: 1});
    }

Verwendungszweck:

setCookie({name: "reminder", value: "buyCoffee", minutes: 20});
deleteCookie("reminder");
Luca Borrione
quelle
8

Einige der anderen Lösungen funktionieren möglicherweise nicht, wenn Sie das Cookie manuell erstellt haben.

Hier ist eine schnelle Möglichkeit, ein Cookie zu löschen:

document.cookie = 'COOKIE_NAME=; Max-Age=0; path=/; domain=' + location.host;
Lemminge19
quelle
6

Ich hatte Probleme beim Löschen eines über JavaScript erstellten Cookies und nachdem ich den Host hinzugefügt hatte, funktionierte es (scrollen Sie den Code unten rechts, um das zu sehen location.host). Versuchen Sie nach dem Löschen der Cookies in einer Domain Folgendes, um die Ergebnisse anzuzeigen:

if (document.cookie.length==0)
{
 document.cookie = 'name=example; expires='+new Date((new Date()).valueOf()+1000*60*60*24*15)+'; path=/; domain='+location.host;

 if (document.cookie.length==0) {alert('Cookies disabled');}
 else
 {
  document.cookie = 'name=example; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain='+location.host;

  if (document.cookie.length==0) {alert('Created AND deleted cookie successfully.');}
  else {alert('document.cookies.length = '+document.cookies.length);}
 }
}
John
quelle