2010-12-16 15 views
2

Warum kann ich dieses Cookie nicht löschen?PHP - Cookie funktioniert nicht?

Wenn sich ein Benutzer anmeldet, wird authenticate_user() ausgeführt. Wenn sich der Benutzer abmeldet, wird logout() ausgeführt. Wenn die Klasse ausgeführt wird, wird der Status über update_status() generiert.

Wie kann ich den Statuscookie beenden? Egal was ich versuche, es existiert und der Benutzer kann sich nicht abmelden.

[CODE ENTFERNT]

es gelöst.

Wenn Sie ein Cookie löschen, müssen Sie angeben, auf welche Verzeichnisse das Cookie zugreifen kann.

Not Deleted 
setcookie("status", "", (time()+3600), '/'); 
setcookie("status", "", (time()-3600)); 

Deleted 
setcookie("status", "", (time()+3600), '/'); 
setcookie("status", "", (time()-3600), '/'); 
+0

Das beantwortet deine Frage nicht direkt, also stelle ich es nicht als Antwort dar, aber warum machst du dir dein Leben schwer, indem du auch den Cookie * verwendest, anstatt nur alles in der Sitzung zu machen? Die Art, wie du Dinge machst, sieht komplexer aus und ich kann den Punkt nicht wirklich sehen. Wenn Sie alles in der Sitzung lassen, dann können Sie einfach 'session_destroy' und sie sind fertig. –

+0

Ich habe anscheinend zur gleichen Zeit geantwortet, du hast es herausgefunden :) –

Antwort

1

Ist der Status ein Sitzungscookie? Wenn es dann $_COOKIE['status'] wird nicht existieren.

Verwenden Sie session_destroy(), um es zu entfernen, stellen Sie sicher, Sie haben session_start() am Anfang der Seite zuerst (das ist wahrscheinlich, warum Ihre Probleme mit Sitzungen nicht funktioniert).

0

Versuchen Sie stattdessen ...

setcookie("status", "", time()-3600, ""); 
0

Das ist ein bisschen eine Grauzone.

Als erstes ist zu beachten, dass Sie versuchen, den cvookie zu löschen, indem Sie seinen Ablauf auf eine Stunde einstellen - aber in welcher Zeitzone läuft Ihr Skript? Und in welcher Zeitzone ist der Kunde?

Ich habe auch Verhalten gesehen, das von Browsern zu erklären scheint, die an Cookies hängen, wenn die Ablaufzeit später auf ein Datum in der Vergangenheit gesetzt wird (lange in der Vergangenheit - keine Zeitzone Sache).

Das bloße Vorhandensein eines Cookies sollte NIEMALS als Beweis für die Authentifizierung behandelt werden - dies sollte eine Handhabe für Daten sein, die serverseitig gespeichert sind. Die Lösung besteht also darin, den VALUE des Cookies zu einem unsinnigen Wert zu überschreiben - nicht seine Ablaufzeit zu ändern.