jquery, Cookies löschen

90

Ich möchte JQuery verwenden, um Cookies zu löschen. Ich habe es versucht

$.cookie('name', '', { expires: -1 });

Dann aktualisiere ich die Seite und der Cookie ist noch da:

alert('name:' +$.cookie('name'));

Warum? Vielen Dank

user319854
quelle
Einige Browser löschen das Cookie erst, nachdem der Browser neu gestartet wurde.
ZOLDIK

Antworten:

143

Um ein Cookie mit JQuery zu löschen, setzen Sie den Wert auf null:

$.cookie("name", null, { path: '/' });

Bearbeiten: Die endgültige Lösung bestand darin, die pathEigenschaft beim Zugriff auf das Cookie explizit anzugeben , da das OP von mehreren Seiten in verschiedenen Verzeichnissen auf das Cookie zugreift und daher die Standardpfade unterschiedlich waren (dies wurde in der ursprünglichen Frage nicht beschrieben). Die Lösung wurde in der folgenden Diskussion entdeckt, was erklärt, warum diese Antwort akzeptiert wurde - obwohl sie nicht korrekt war.

Bei einigen Versionen von jQ-Cookies setzt die obige Lösung das Cookie auf den String null. So wird der Cookie nicht entfernt. Verwenden Sie stattdessen den unten vorgeschlagenen Code.

$.removeCookie('the_cookie', { path: '/' });
Chadwick
quelle
Aber aus der Quelle hier: plugins.jquery.com/files/jquery.cookie.js.txt : if (value === null) { value = '';options.expires = -1;}, das, was in der Verarbeitungsfunktion enthalten ist, also sollen sie dasselbe ausführen. (Parameter sind (name, value, options))
Aularon
9
Befinden sich der Cookie-Einstellungscode und der Testcode auf derselben Seite? Wenn nicht, müssen Sie pathdie Optionen in den Optionen explizit auf beide Befehle festlegen , da standardmäßig der Pfad der aktuellen Seite verwendet wird. Testen Sie, indem Sie das Stammverzeichnis Ihrer Domain an allen Stellen festlegen, an denen der Cookie gelesen und geschrieben wird:$.cookie('name', value, {path:'/'})
Chadwick
1
Chadwick> Vielleicht hast du recht. Zum Beispiel Ich setze Cookies auf site.com und gehe dann auf site.com/user, site.com/user/mod, site.com/user/mod/new und möchte Cookies auf dieser ganzen Seite sehen. Wie muss ein Pfad aussehen, wie folgt: {Pfad: '/'}?
user319854
2
Dieser Code entfernt das Cookie nicht, setzt jedoch den Wert null.
Tomzan
12
-1, da dadurch das Cookie nicht entfernt wird. $.removeCookie('cookie_name')tut.
Rosdi Kasim
71

Sie können dies versuchen:

$.removeCookie('the_cookie', { path: '/' });

Quelle: https://github.com/carhartl/jquery-cookie#readme

Gert-Jan Rebel
quelle
Yah .. Ich bin damit
einverstanden
Wenn Sie eine Subdomain verwenden, müssen Sie diese möglicherweise auch angeben. Vor allem, weil der Zeitraum am Anfang des Domainnamens erforderlich sein kann (.www.example.com)
Alexis Wilke
Beachten Sie, dass dies bei uns nicht funktioniert hat, wenn der Code aus irgendeinem Grund in eine andere Funktion wechseln musste. $ .cookie ('name', null) wie oben scheint zuverlässiger zu sein. Dieses Cookie zum Entfernen kann jedoch bei einigen Personen funktionieren.
Ligemer
Das ist eigentlich die wahre Antwort!
Kalaschni
15

Sie können Cookies auch löschen, ohne das Plugin jquery.cookie zu verwenden:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
Jan Richter
quelle
4

Es ist das Problem des Missverständnisses von Cookies. Browser erkennen Cookie-Werte nicht nur für Schlüssel, sondern vergleichen auch den Optionspfad und die Domäne. Browser erkennen also unterschiedliche Werte, welche Cookies diesen Schlüssel als 'Name' mit der Servereinstellungsoption (Pfad = '/'; Domäne = 'mydomain.com') und als Schlüssel 'Name' ohne Option bezeichnen.

Logan Kim
quelle
1

Versuche dies

 $.cookie('_cookieName', null, { path: '/' });

Die {path: '/'} erledigen den Job für Sie

Otto Kanellis
quelle
1

Arbeitete nur für mich , wenn patheingestellt wurde, dh:

$.cookie('name', null, {path:'/'})
Andron
quelle
Downvoting, weil Sie meine Antwort kopieren und als Ihre
einfügen
1
@OttoKanellis so schlage ich auch die akzeptierte Antwort auf downwote (weil es nach meiner Antwort bearbeitet wurde) und Ihre Antwort zu downvote (Ursache Sie nicht Bedeutung der markierten haben Pfadparameter)!
Andron
-3

Was Sie tun, ist richtig, das Problem liegt woanders, z. B. wird der Cookie beim Aktualisieren irgendwie wieder gesetzt.

Aularon
quelle
4
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Uri Agassi
Für genau diese Antwort sage ich, dass OP es richtig macht. Das Kopieren und Einfügen des OP-Codes ist redundant, und das Hinzufügen eines weiteren Codes ist für den Leser verwirrend. Man kann nach oben scrollen und sehen, was das OP tat, es ist der "wesentliche Teil" hier. Wenn Sie jedoch der Meinung sind, dass es besser ist, etwas aufzunehmen (anscheinend tun es einige Leute ... Einer von ihnen hat sogar meine Antwort abgelehnt :)), bearbeiten Sie einfach die Antwort und korrigieren Sie sie entsprechend. Grüße
aularon
Das Problem mit Links ist, dass sie dazu neigen, zu "verrotten" - sie ändern sich, sie bewegen sich, sie verschwinden (Beispiel: Ihr Link ist bereits tot!). Aus diesem Grund bevorzugen wir, dass Sie den relevanten Text aus dem Link zusammen mit diesem zitieren, damit Ihre Antwort in sich geschlossen ist (siehe auch meta.stackexchange.com/questions/8231/… )
Uri Agassi
Ich bin mir dessen durchaus bewusst, aber auch dies ist hier nicht der Fall. Die gesamte Antwort oben kann wie folgt umgeschrieben werden: "Was Sie tun, ist richtig, das Problem liegt woanders, z. B. wird der Cookie beim Aktualisieren irgendwie wieder gesetzt." Link Rot ist also wieder ein Problem, einschließlich der Antwort selbst neben dem Link ist der richtige Weg. Es ist nur irrelevant für diese Antwort.
Aularon
Wenn also eine Antwort immer wieder einen Link enthält und dieser Link tot ist, heißt das nicht, dass die Antwort nicht gut genug ist. Einige Links dienen nur dazu, zusätzliche Details bereitzustellen, sind jedoch für die Vollständigkeit der Antwort nicht erforderlich. Dieses Verhalten scheint mir ein schlecht programmierter Bot zu sein, der nicht über das grundlegende NLP verfügt, um zu verstehen, in welchem ​​Kontext der Link enthalten ist. Sie sollten wahrscheinlich damit aufhören.
Aularon