Sie können $cookie->delete()von github.com/delight-im/PHP-Cookie hilfreich finden. Der Code aus der Frage löscht nur die Eigenschaft, die auf der Serverseite analysiert wurde. Der Cookie wird weiterhin auf der Client-Seite weitergeführt.
Ich verstehe, dass dies ein Beispiel ist, aber bitte speichern Sie niemals Benutzernamen oder Passwort in Cookies.
Tamasd
3
Es ist sinnlos zu unset($_COOKIE['Hello']);. Es ändert nichts, wenn Sie es entfernen.
Machineaddict
30
@machineaddict unset($_COOKIE['Hello']);ist eigentlich wichtig, wenn Sie das Cookie später im Code überprüfen möchten .
Andreas Hultgren
4
funktioniert gut, aber wenn Sie versuchen, die Seite neu zu laden. es sah Cookie mit alten Daten gesetzt, warum?.
Nilesh Patel
9
======= FUNKTIONIERT NICHT IN CHROM ======= Ich habe diesen Code heute ausprobiert und wenn ich mit Google Chrome auf die Website zugreife und dann in Chrome auf Entwicklertools gehe, kann ich sehen, dass die Ablaufzeit abgelaufen ist wird auf 1 Sekunde vor der Epoche gesetzt (z. B. 1969-12-31 23:59:59). Wenn ich die Seite das nächste Mal sende, wird das Cookie an den Server gesendet. Wenn ich -1 in 1 geändert habe (z. B. 1970-01-01 00:00:01), um den folgenden Befehl zu geben: setcookie ('Hallo', null, 1, '/'); dann handelte Chrome wie erwartet und reichte den Cookie nicht ein
Peter Hinds
284
Setzen Sie den Wert auf "" und das Ablaufdatum auf gestern (oder ein Datum in der Vergangenheit).
setcookie("hello","", time()-3600);
Dann läuft das Cookie beim nächsten Laden der Seite ab.
Wie wäre es, wenn Sie die Zeit auf 0 (die Epoche) setzen? =]
Strager
12
Wenn Sie ein Datum zu weit in die Vergangenheit verschoben haben, bellt der IE und igores es, dh der Wert wird nicht entfernt.
Julien
52
@strager Im Handbuch heißt es: Wenn der Wert auf 0 gesetzt oder weggelassen wird, läuft der Cookie am Ende der Sitzung ab (wenn der Browser geschlossen wird). Das löscht den Cookie nicht wirklich. Ich weiß wirklich nicht, ob der IE das tun wird, was Julien gesagt hat, aber es ist mehr als möglich, dass der IE etwas Seltsames tut.
Yannis
31
Vergessen Sie auch nicht, das Kontrollkästchen zu deaktivieren ($ _ COOKIE ["Hallo"]), denn wenn auf der restlichen Seite Code vorhanden ist, der sich mit $ _COOKIE ["Hallo"] befasst, wird es immer noch gesetzt. Ich bin gerade von diesem gebissen worden.
Magmatisch
12
Außerdem ist es eine gute Idee, den Pfad festzulegen, also setcookie ('Hallo', '', Zeit () - 3600, '/');
Stephan Weinhold
226
Eine saubere Möglichkeit, ein Cookie zu löschen, besteht darin, sowohl den $_COOKIEWert als auch die Browser-Cookie-Datei zu löschen :
if(isset($_COOKIE['key'])){
unset($_COOKIE['key']);
setcookie('key','', time()-3600,'/');// empty value and old timestamp}
Dies ist die beste Methode, da Sie die Seite nicht aktualisieren müssen!
MaxV
19
Ich gehe die Seite weiter durch und die Antworten werden immer besser, lustig. Aber das ist das Beste, hör auf hier zu suchen.
Andrew
23
Zu Ihrer Information, wenn Sie das Cookie über einen Pfad setzen, müssen Sie den Pfad auch in diesen setcookieAufruf aufnehmen:setcookie('key', '', time() - 3600, '/');
Gavin
1
@ Gavin Danke für diesen Tipp. Ich habe mich gefragt, warum es nicht gelöscht wurde, aber unsettingerfolgreich war.
stinkysGTI
1
Für alle, die die Existenz eines Cookies überprüfen und sich um Cookies kümmern , die mit nullWerten vorhanden sind, müssen Sie stattdessen array_key_exists () verwenden, da ein Cookie mit einem nullWert durch eine isset()Prüfung nicht gefunden wird .
Leith
27
Um ein Cookie zuverlässig zu löschen, reicht es nicht aus, es so einzustellen, dass es in der Vergangenheit jederzeit abläuft, wie von Ihrem PHP-Server berechnet. Dies liegt daran, dass Client-Computer Zeiten haben können und oft haben, die von denen Ihres Servers abweichen.
Die beste Vorgehensweise ist es, das aktuelle Cookie mit einem leeren Cookie zu überschreiben , die 1 Sekunde abläuft in der Zukunft nach der Epoche (1. Januar 1970 00.00.00 UTC), wie so:
Korrigieren Sie mich, wenn ich falsch liege, aber wenn Sie das auf "1" setzen, wird es auf eine Sekunde nach der Epoche gesetzt, nicht auf eine Sekunde in der Zukunft. Ich glaube, Sie haben Recht mit den Zeitzonenunterschieden. Die beste Lösung wäre es, sie auf 2 Tage in der Vergangenheit einzustellen (sodass selbst die am weitesten entfernte Zeitzone den Cookie immer noch deaktivieren würde).
PaulSkinner
@PaulSkinner Das Epochendatum ist unabhängig von Zeitzonen. Der Computer führt diese Berechnung für Sie durch.
AlexR
3
@AlexR Ja. Beantwortet meinen Punkt allerdings nicht wirklich. Zu meinem Verständnis, der obigen Code wird das Cookie gesetzt in der Vergangenheit (eine Sekunde hinter der Epoche) verfallen, wenn ich nicht irre.
PaulSkinner
@ PaulSkinner natürlich, der Rest Ihres Kommentars ist vollkommen in Ordnung.
AlexR
9
+1 für die "1". Ich verstehe nicht, warum alle anderen so darauf fixiert sind, einen gelöschten Cookie genau eine Stunde in der Vergangenheit zu setzen.
Meisner
20
Dadurch wird das Cookie in Ihrem Code deaktiviert. Da die Variable $ _COOKIE jedoch bei jeder Anforderung aktualisiert wird, wird sie bei der Anforderung auf der nächsten Seite erneut angezeigt.
Legen Sie das Ablaufdatum in der Vergangenheit fest, um das Cookie tatsächlich zu entfernen:
// set the expiration date to one hour ago
setcookie("hello","", time()-3600);
@PratikCJoshi Nur wenn Ihr Code später danach sucht.
AlphaMycelium
14
Ich hatte das gleiche Problem in meinem Code und stellte fest, dass es sich um ein Problem mit dem Cookie-Pfad handelte. Schauen Sie sich diesen Beitrag zum Stapelüberlauf an: PHP-Set-Cookie kann nicht gelöscht werden
Ich hatte das Cookie mit dem Pfadwert "/" gesetzt, hatte aber keinen Pfadwert, als ich versuchte, es zu löschen, sodass es nicht gelöscht wurde. Hier ist ein Beispiel dafür, was funktioniert hat:
Cookie setzen:
$cookiePath ="/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Siehe das Beispiel mit der Bezeichnung " Beispiel # 2 setcookie () delete example " aus den PHP-Dokumenten. Um ein Cookie aus dem Browser zu löschen, müssen Sie dem Browser mitteilen, dass das Cookie abgelaufen ist. Der Browser entfernt es dann. unsetWenn Sie es verwendet haben, wird nur das Hallo-Cookie aus dem COOKIE-Array entfernt.
Um ein Cookie zu löschen, müssen Sie nur den Wert auf NULL setzen:
"Wenn Sie ein Cookie mit nicht standardmäßigen Werten für eine Ablaufzeit, einen Pfad oder eine Domäne festgelegt haben, müssen Sie diese Werte erneut angeben, wenn Sie das Cookie löschen, damit das Cookie ordnungsgemäß gelöscht wird." Zitat aus dem Buch "Learning PHP5".
Dieser Code sollte also funktionieren (funktioniert für mich):
Es ist zuverlässig, deshalb. Eine Kombination aus dem Setzen des Werts auf nichts und einer Zeit in der Vergangenheit (aber nicht zu weit, da der IE ihn gelegentlich nicht zu weit von dem entfernt mag, was ich gelesen habe) funktioniert auf der ganzen Linie.
PaulSkinner
Die leere Zeichenfolge ''ist nicht dasselbe wie null.
Orev
3
So entfernen Sie alle Cookies, die Sie schreiben könnten:
foreach($_COOKIE as $key => $value){
unset($value);
setcookie($key,'', time()-3600);}
Ich weiß, dass es lange her ist, dass dieses Thema erstellt wurde, aber ich habe einen kleinen Fehler in dieser Lösung gesehen (ich kann es so nennen, weil es ein Detail ist). Ich stimme zu, dass die bessere Lösung wahrscheinlich diese Lösung ist:
Im vorliegenden Fall löschen Sie die Cookies jedoch in jedem Fall, in dem die nicht gesetzte Funktion funktioniert, und erstellen sofort neue abgelaufene Cookies, falls die nicht gesetzte Funktion nicht funktioniert.
Das bedeutet, dass selbst wenn die nicht gesetzte Funktion funktioniert, immer noch 2 Cookies auf dem Computer vorhanden sind. Das geforderte Ziel besteht aus logischer Sicht darin, die Cookies zu löschen, wenn dies möglich ist, und wenn dies wirklich nicht der Fall ist, lassen Sie sie ablaufen. um "das sauberste" Ergebnis zu erhalten.
Die Funktion unset ist für die PHP-Logik gedacht (wenn Sie die Variable $ _COOKIE ['Hello'] verwenden möchten, können Sie dies nicht, da sie nicht gesetzt ist). Und die Funktion setcookie ist für den Navigator gedacht. Aus verschiedenen Gründen hat die Reihenfolge der Funktionen keinen Einfluss auf den tatsächlichen Code.
Kalzem
Tatsächlich wusste ich es ja, aber wenn Sie unbedingt sicher sein möchten, dass das Cookie nicht gesetzt / gelöscht wurde und Sie die beiden Lösungen direkt verwenden, wäre es sauberer, bevor Sie diese verfallen lassen und dann diese als nicht gesetzte Thesen und nicht setzen Erstellen Sie dann ein abgelaufenes Cookie neu ... wenn Sie sehen, was ich meine?
Greg
Ja, tut mir leid, dass ich gerade geantwortet habe :) Ich habe es gesendet, weil ich Leute gesehen habe, die es auf die andere Weise gemacht haben. Aber es scheint so klüger zu sein, denke ich.
Greg
2
$cookie_name ="my cookie";
$cookie_value ="my value";
$cookie_new_value ="my new value";// Create a cookie,
setcookie($cookie_name, $cookie_value , time()+(86400*30),"/");//86400 = 24 hours in seconds// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time()+(86400*30),"/");// Delete a cookie,
setcookie($cookie_name,'', time()-3600,"/");// time() - 3600 means, set the cookie expiration date to the past hour.
Dieser Code löscht die Cookie-Variable vollständig aus Ihrer gesamten Domain, dh; "/" - Gibt an, dass der Wert der Cookie-Variablen für alle Domänen festgelegt wurde, nicht nur für die aktuelle Domäne oder den aktuellen Pfad. time () - 300 bedeutet, dass es auf eine vorherige Zeit eingestellt ist, sodass es abläuft.
Sie können eine Sitzungsvariable basierend auf Cookie-Werten festlegen
session_start();if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin']=="true")){
$_SESSION['loggedin']="true";}
echo ($_SESSION['loggedin']=="true"?"You are logged in":"Please Login to continue");
Sie können einfach diese Anpassungsfunktion verwenden:
function unset_cookie($cookie_name){if(isset($_COOKIE[$cookie_name])){
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name,null,-1);}else{returnfalse;}}
Wenn Sie $ _COOKIE ['user_account'] entfernen möchten.
Benutz einfach:
Lesen Sie einfach die Dokumente. "Wenn auf 0 gesetzt oder weggelassen, läuft das Cookie am Ende der Sitzung ab (wenn der Browser geschlossen wird)."
DrLightman
@ DrLightman Vielen Dank für Ihre Teilnahme. Können Sie bitte die Dokumentation zitieren?
Amir Fo
function.setcookie.php , Parameter läuft ab . "Wenn auf 0 gesetzt oder weggelassen, läuft das Cookie am Ende der Sitzung ab (wenn der Browser geschlossen wird)."
DrLightman
1
Setzen Sie einfach den Wert des Cookies auf, falseum ihn zu deaktivieren.
Sie müssen Cookies mit PHP auf Ihrem Server und auch mit JS für Ihren Browser löschen. (Sie haben mit PHP erstellt, aber Cookie-Dateien befinden sich auch im Browser-Client.):
Ein Beispiel:
if($_GET['action']=='exit'){// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Sie benötigen kein JavaScript, um den Cookie-Wert festzulegen / zu löschen. Die PHP-Funktion setcookie erledigt das für Sie php.net/manual/en/function.setcookie.php
Michael Khalili
-5
Die meisten von Ihnen vergessen, dass dies nur auf einem lokalen Computer funktioniert. Für eine Domain benötigen Sie ein Muster wie dieses Beispiel.
Der Domänenparameter bezeichnet die aktuelle Domäne, wenn sie weggelassen wird.
DustWolf
Ich wollte damit sagen, dass Ihre Antwort falsch ist. Es funktioniert für jede Domäne, nicht nur für den lokalen Computer, da automatisch die aktuelle Domäne verwendet wird. Und dein Kommentar bedeutet zu sagen, dass du beleidigt bist oder so?
DustWolf
Lesen Sie überhaupt den Text, der über dem Code steht? Hör auf mich zu nerven, ich arbeite. Ich bin fertig mit dir zu reden.
Peter Gruppelaar
Ich verstehe nicht, warum Sie sich über andere Benutzer ärgern, wenn diese auf einen Fehler in Ihrer Antwort hinweisen. setcookiefunktioniert für jede Domain, egal ob localhost oder nicht.
Xorinzor
Wenn also alle sagen, dass dies der Fall ist ... dann muss etwas offensichtlich falsch mit meiner Antwort sein ... der fct-Hut, auf den in diesem Beitrag hingewiesen wurde, spielt keine Rolle? ... Sie möchten nur eine Art Richtungsantwort und ignoriere alle globalen Benutzer, die an einer ähnlichen Situation arbeiten ... ich verstehe ... hör auf mich zu nerven, meine Antwort ist nicht falsch.
$cookie->delete()
von github.com/delight-im/PHP-Cookie hilfreich finden. Der Code aus der Frage löscht nur die Eigenschaft, die auf der Serverseite analysiert wurde. Der Cookie wird weiterhin auf der Client-Seite weitergeführt.Antworten:
Sie können dies versuchen
quelle
unset($_COOKIE['Hello']);
. Es ändert nichts, wenn Sie es entfernen.unset($_COOKIE['Hello']);
ist eigentlich wichtig, wenn Sie das Cookie später im Code überprüfen möchten .Setzen Sie den Wert auf "" und das Ablaufdatum auf gestern (oder ein Datum in der Vergangenheit).
Dann läuft das Cookie beim nächsten Laden der Seite ab.
quelle
Eine saubere Möglichkeit, ein Cookie zu löschen, besteht darin, sowohl den
$_COOKIE
Wert als auch die Browser-Cookie-Datei zu löschen :quelle
setcookie
Aufruf aufnehmen:setcookie('key', '', time() - 3600, '/');
unsetting
erfolgreich war.null
Werten vorhanden sind, müssen Sie stattdessen array_key_exists () verwenden, da ein Cookie mit einemnull
Wert durch eineisset()
Prüfung nicht gefunden wird .Um ein Cookie zuverlässig zu löschen, reicht es nicht aus, es so einzustellen, dass es in der Vergangenheit jederzeit abläuft, wie von Ihrem PHP-Server berechnet. Dies liegt daran, dass Client-Computer Zeiten haben können und oft haben, die von denen Ihres Servers abweichen.
Die beste Vorgehensweise ist es, das aktuelle Cookie mit einem leeren Cookie zu überschreiben , die 1 Sekunde abläuft
in der Zukunftnach der Epoche (1. Januar 1970 00.00.00 UTC), wie so:quelle
Dadurch wird das Cookie in Ihrem Code deaktiviert. Da die Variable $ _COOKIE jedoch bei jeder Anforderung aktualisiert wird, wird sie bei der Anforderung auf der nächsten Seite erneut angezeigt.
Legen Sie das Ablaufdatum in der Vergangenheit fest, um das Cookie tatsächlich zu entfernen:
quelle
unset()
der Cookie nicht gebraucht werden?Ich hatte das gleiche Problem in meinem Code und stellte fest, dass es sich um ein Problem mit dem Cookie-Pfad handelte. Schauen Sie sich diesen Beitrag zum Stapelüberlauf an: PHP-Set-Cookie kann nicht gelöscht werden
Ich hatte das Cookie mit dem Pfadwert "/" gesetzt, hatte aber keinen Pfadwert, als ich versuchte, es zu löschen, sodass es nicht gelöscht wurde. Hier ist ein Beispiel dafür, was funktioniert hat:
Cookie setzen:
Cookie löschen:
Hoffentlich hilft das.
quelle
Wenn Sie festlegen, dass das Cookie in der Vergangenheit abläuft, wird es vom Browser entfernt. Siehe Beispiel zum Löschen von setcookie () auf php.net
quelle
Siehe das Beispiel mit der Bezeichnung " Beispiel # 2 setcookie () delete example " aus den PHP-Dokumenten. Um ein Cookie aus dem Browser zu löschen, müssen Sie dem Browser mitteilen, dass das Cookie abgelaufen ist. Der Browser entfernt es dann.
unset
Wenn Sie es verwendet haben, wird nur das Hallo-Cookie aus dem COOKIE-Array entfernt.quelle
So funktioniert PHP v7 setcookie () Code, wenn Sie Folgendes tun:
Aus der Ausgabe von tcpdump sendet der Server beim Sniffing an Port 80 die folgenden HTTP-Header an den Client (Browser):
Wenn der Browser Pakete in den folgenden Anforderungen beobachtet, sendet er diese Cookies nicht mehr in den Headern
quelle
Um ein Cookie zu löschen, müssen Sie nur den Wert auf NULL setzen:
"Wenn Sie ein Cookie mit nicht standardmäßigen Werten für eine Ablaufzeit, einen Pfad oder eine Domäne festgelegt haben, müssen Sie diese Werte erneut angeben, wenn Sie das Cookie löschen, damit das Cookie ordnungsgemäß gelöscht wird." Zitat aus dem Buch "Learning PHP5".
Dieser Code sollte also funktionieren (funktioniert für mich):
Cookie setzen:
setcookie('foo', 'bar', time() + 60 * 5);
Cookie löschen:
setcookie('foo', '', time() + 60 * 5);
Aber ich habe bemerkt, dass jeder das Ablaufdatum auf Vergangenheit setzt, ist das notwendig und warum?
quelle
''
ist nicht dasselbe wienull
.So entfernen Sie alle Cookies, die Sie schreiben könnten:
quelle
Stellen Sie einfach das Ablaufdatum auf vor einer Stunde ein, wenn Sie das Cookie wie folgt "entfernen" möchten:
oder
Quelle: http://www.php.net/manual/en/function.setcookie.php
Sie sollten die
filter_input()
Funktion für alle Globals verwenden, die ein Besucher eingeben / bearbeiten kann, wie folgt:Weitere Informationen finden Sie hier: http://www.php.net/manual/en/function.filter-input.php und hier: http://www.w3schools.com/php/func_filter_input.asp
quelle
Ich weiß, dass es lange her ist, dass dieses Thema erstellt wurde, aber ich habe einen kleinen Fehler in dieser Lösung gesehen (ich kann es so nennen, weil es ein Detail ist). Ich stimme zu, dass die bessere Lösung wahrscheinlich diese Lösung ist:
Im vorliegenden Fall löschen Sie die Cookies jedoch in jedem Fall, in dem die nicht gesetzte Funktion funktioniert, und erstellen sofort neue abgelaufene Cookies, falls die nicht gesetzte Funktion nicht funktioniert.
Das bedeutet, dass selbst wenn die nicht gesetzte Funktion funktioniert, immer noch 2 Cookies auf dem Computer vorhanden sind. Das geforderte Ziel besteht aus logischer Sicht darin, die Cookies zu löschen, wenn dies möglich ist, und wenn dies wirklich nicht der Fall ist, lassen Sie sie ablaufen. um "das sauberste" Ergebnis zu erhalten.
Ich denke, wir sollten es besser machen:
Danke und einen schönen Tag :)
quelle
quelle
Wenn Sie das Cookie vollständig aus Ihrer gesamten aktuellen Domain löschen möchten, hilft Ihnen der folgende Code auf jeden Fall.
Dieser Code löscht die Cookie-Variable vollständig aus Ihrer gesamten Domain, dh; "/" - Gibt an, dass der Wert der Cookie-Variablen für alle Domänen festgelegt wurde, nicht nur für die aktuelle Domäne oder den aktuellen Pfad. time () - 300 bedeutet, dass es auf eine vorherige Zeit eingestellt ist, sodass es abläuft.
So wird es perfekt gelöscht.
quelle
Sie können eine Sitzungsvariable basierend auf Cookie-Werten festlegen
quelle
Sie können einfach diese Anpassungsfunktion verwenden:
Wenn Sie $ _COOKIE ['user_account'] entfernen möchten.
Benutz einfach:
quelle
Es ist einfach!
quelle
Wenn Sie
0
für die Zeit eingeben , meinen Sie "jetzt" (+ 0s von jetzt ist eigentlich jetzt) für den Browser und es löscht das Cookie.Ich habe es im Chrome-Browser überprüft, der mir Folgendes gibt:
quelle
Setzen Sie einfach den Wert des Cookies auf,
false
um ihn zu deaktivieren.PS: - Das ist der einfachste Weg.
quelle
Sie müssen Cookies mit PHP auf Ihrem Server und auch mit JS für Ihren Browser löschen. (Sie haben mit PHP erstellt, aber Cookie-Dateien befinden sich auch im Browser-Client.):
Ein Beispiel:
quelle
Die meisten von Ihnen vergessen, dass dies nur auf einem lokalen Computer funktioniert. Für eine Domain benötigen Sie ein Muster wie dieses Beispiel.
quelle
setcookie
funktioniert für jede Domain, egal ob localhost oder nicht.