Cookie mit Namen löschen?

151

Wie kann ich ein bestimmtes Cookie mit dem Namen löschen roundcube_sessauth?

Sollte nicht folgendes sein:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

Und dann:

<a href="javascript:del_cookie(name);">KILL</a>

Den roundcube_sessauthKeks töten ?

Charlie
quelle
1
name? Was ist der Sinn davon? Oder handelt es sich um einen Kater aus einer vielseitigeren Version, mit der Sie den Cookie-Namen angeben können?
Paxdiablo
Denken Sie nicht, dass das ein Betrug ist. Es wird speziell nach dem Löschen aller Cookies gefragt .
Paxdiablo
1
Ich möchte nicht alle Cookies löschen ... Nur eines. Ich habe den Basiscode beim Googeln gefunden. Und natürlich habe ich es versucht. @Paxdiablo Ich habe es für die Benennung des Cookies angenommen, aber ich könnte völlig falsch liegen.
Charlie
@paxdiablo - ...How can I delete a specific cookie
Derek 15 會 功夫
1
@Derek et al., Sie scheinen falsch zu verstehen. Ich habe festgestellt, dass der vorgeschlagene Betrüger von Gabe überhaupt kein Betrüger ist, da der vorgeschlagene Betrüger nach dem Löschen aller Cookies gefragt hat und diese Frage nach dem Löschen eines bestimmten Cookies fragt . Ich war nicht beschweren sich über diese Frage in keiner Weise oder Form :-)
paxdiablo

Antworten:

252

Sie sollten den Pfad definieren, in dem das Cookie vorhanden ist, um sicherzustellen, dass Sie das richtige Cookie löschen.

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Wenn Sie den Pfad nicht angeben, setzt der Browser ein Cookie relativ zu der Seite, auf der Sie sich gerade befinden. Wenn Sie das Cookie auf einer anderen Seite löschen, bleibt das andere Cookie bestehen.

Bearbeiten Sie basierend auf dem Kommentar von @Evan Morrison.
Beachten Sie, dass in einigen Fällen der DomainParameter erforderlich ist , um das richtige Cookie zu identifizieren .
Normalerweise ist es definiert als Domain=.yourdomain.com.
Wenn Sie einen Punkt vor Ihren Domain-Namen setzen, kann dieses Cookie in jeder Sub-Domain vorhanden sein (gilt wwwauch als Sub-Domain).

Wie in der Antwort von @ RobertT erwähnt, können HttpOnlyCookies auf der Clientseite nicht mit JavaScript gelöscht werden.

emii
quelle
23
Das hat mich verrückt gemacht! Nachdem ich Path = / hinzugefügt hatte, konnte ich löschen. Vielen Dank!
duyn9uyen
12
Dies sollte die richtige Antwort sein, ohne die es Pathin den meisten Fällen nicht funktioniert .
SuperMarco
9
Ich konnte ein Cookie erst löschen, als ich sowohl den Pfad als auch den korrekten 'Domain = value; '... Meine Aussage war also: document.cookie = "cookieName =; path = /; expires = Do, 01. Januar 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison
1
Diese Lösung funktioniert immer noch, kann aber etwas präziser geschrieben werden Max-Age=0, wenn Sie sich für solche Dinge interessieren.
MaxPRafferty
181

Um ein Cookie zu löschen, setzen Sie das expiresDatum auf etwas in der Vergangenheit. Eine Funktion, die dies tut, wäre.

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

Dann löschen Sie roundcube_sessautheinfach ein Cookie mit dem Namen do.

delete_cookie('roundcube_sessauth');
paxdiablo
quelle
1
Ich fühle mich wie das sollte funktionieren (es sieht aus wie es funktionieren soll: D), aber ich bin gerade die von meiner Seite in Firefox Cookies und wenn ich die „kill“ Schaltfläche klicken, wird das Cookie nicht gelöscht zu werden . Irgendeine Idee warum?
Charlie
Dies funktioniert in Google Chrome. Installieren Sie Firebug und prüfen Sie, ob Fehler vorliegen.
1
Keine Fehler, ich denke, es wird einfach nicht das Cookie in Roundcube gelöscht. Es löscht wahrscheinlich andere Cookies ganz gut.
Charlie
39
Für Benutzer, die nach einer Antwort auf diese Frage suchen, lesen Sie bitte die Antwort unten. Der path=/Schlüssel ist wichtig für die Browserkompatibilität.
Bencripps
2
Diese Antwort hat bei mir in Chrome nicht funktioniert und in Firefox nicht ausprobiert. Aber die Antwort von emii unten hat funktioniert.
Daniel F
11

// Wenn exMins = 0 übergeben wird, wird es gelöscht, sobald es erstellt wird.

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.
Kishor Patil
quelle
exMins ist in diesem Beispiel undefiniert, Sie meinten wahrscheinlich exdays
bhurlow
Ja .. stattdessen benenne das Argument exdays in exMins um .. danke #BhBh
Kishor Patil
7

Ich bin mir nicht sicher, ob dies bei der Roundcube-Version vom 12. Mai der Fall war, aber für die aktuelle Version lautet die Antwort, dass Sie keine roundcube_sessauthCookies aus JavaScript löschen können , da diese als gekennzeichnet sind HttpOnly. Dies bedeutet, dass auf den clientseitigen JS-Code nicht zugegriffen werden kann und dass er nur durch ein serverseitiges Skript oder durch direkte Benutzeraktionen (über einige Browsermechaniken wie den integrierten Debugger oder ein Plugin) entfernt werden kann.

RobertT
quelle
1

Sie können diese Lösung ausprobieren

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;
Nafees
quelle
0

In meinem Fall habe ich Blowcode für verschiedene Umgebungen verwendet.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
Amir Movahedi
quelle