PHP Cookie löschen, aber wie?

stna1981

Commander
Dabei seit
März 2007
Beiträge
2.341
Moin Leute,

ich will eine Session komplett löschen, inkl. Cookie, bin mir aber nicht sicher, welche Methode dafür am besten geeignet ist. Zum einen habe ich das hier gefunden:

setcookie("TestCookie", "", time() - 3600);

Dazu gibts die Anmerkung, dass das problematisch sein kann, wenn die Serverzeit nicht stimmt. Als Lösung wurde empfohlen, statt time() einen Timestamp zu nutzen, der dem Datum '01.01.1970' entspricht. Soweit so gut. Aber was ist der Unterschied zu dieser Methode:

unset($_COOKIE['TestCookie']);

Das letzte funktioniert soweit, aber kann es da auch Probleme geben, oder was ist der Unterschied zu setcookie()? Gilt das letztere evtl. nur serverseitig und das andere clientseitig?

Gruß,

Stefan
 

Alphamoose

Lieutenant
Dabei seit
Aug. 2004
Beiträge
532
unset($_COOKIE['TestCookie']); löscht nur die Variable für die Laufzeit des Skripts, der Cookie bleibt im Browser vorhanden und wird bei jedem Aufruf der Website wieder gesendet. Löscht den Cookie also effektiv garnicht.
setcookie("TestCookie", "", time() - 3600); löscht den Cookie dagegen im Browser und ist somit die sinnvollere Variante

@dAv3.b: Super Antwort, wer lesen kann ist klar im Vorteil :rolleyes:

Edit: ich les grad noch, seit PHP5 löscht PHP wohl bei unset($_COOKIE) auch automatisch das Cookie, also wäre es da egal welchen Befehl man verwendet...
 
Zuletzt bearbeitet:

stna1981

Commander
Ersteller dieses Themas
Dabei seit
März 2007
Beiträge
2.341
Danke für die Antwort, kannst du mir die Quelle nennen, wo das mit PHP5 und unset($_COOKIE) steht?
 

stna1981

Commander
Ersteller dieses Themas
Dabei seit
März 2007
Beiträge
2.341
Danke, aber die kenn ich schon, das Problem ist, dass dort nicht näher auf unset($_COOKIE) eingegangen wird...
 

BerniG

Lieutenant
Dabei seit
Okt. 2004
Beiträge
620
Da gibts doch ein Beispiel auf der Seite:
Beispiel #2 setcookie()-Beispiele zum Löschen

Beim Löschen eines Cookies sollten Sie sicherstellen, dass das Verfallsdatum in der Vergangenheit liegt, um den Mechanismus zum Löschen des Cookies im Browser auszulösen. Die folgenden Beispiele zeigen, wie die im vorigen Beispiel gesendeten Cookies wieder gelöscht werden:

<?php
// Setzen des Verfalls-Zeitpunktes auf 1 Stunde in der Vergangenheit
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".example.com", 1);
?>
Genau so machst dus auch. Wenn du vorher das Cookie selbst gesetzt hast weiß du auch alle Parameter, die zum Löschen nötig sind (müssen genauso angegeben werden. Die Zeit kannst du auch weiter in die Vergangenheit setzen; im Allgemeinen sollte die Serverzeit ja schon so ungefährt stimmen...

Wenn ein Browser ein Cookie mitsendet, so sind die Informationen darüber in PHP mittels des $_COOKIE-Arrays verfügbar. Wenn du ein unset darauf machst, dann löschst du lediglich dieses Cookie-Array auf dem Server (also nicht im Browser!) aber der Browser sendet beim nächsten Request wieder dasselbe Cookie mit weil er davon gar nichts mitbekommt. Von einer Änderung in PHP5 ist mir nichts bekannt. Wenn du mit "setcookie" ein Cookie löschst, so wirkt sich das natürlich im PHP-Script erst beim nächsten Seitenaufruf aus. Wenn man die Auswirkung gleich haben will kann man tatsächlich noch zusätzlich (!) ein unset machen aber das hat nichts mit dem Browser selbst zu tun.
 
Zuletzt bearbeitet:
Top