Cookie per setcookie löschen funktioniert nicht
Hallo,
ich würde gern den Sessioncookie "testcookie" am Ende eines Prozesses löschen. Dazu setze ich am Seitenende der letzten Seite:
setcookie("testcookie", "");
Aber, wenn ich die letzte Seite aufrufe, ist der Cookieinhalt immer noch da.
Ich dachte mir, dass der Browser den Cookieinhalt dann vielleicht auf der nächsten Seite löscht, aber das ist auch nciht der Fall.
Hat jemand eine Idee oder eine Lösung zum Problem?
Ich freue mich auf eure Ideen und wünsch einen angenehmen Freitag
Gruss Mel
Antwort schreiben
Antwort 1 von Proggi vom 10.08.2019, 09:52 Options
Du must das Cookie einfach neu setzen und als Gültigkeit (also der Zeitraum bis wann das Cookie gültig ist) auf die vergangenheit setzen.
setcookie("TestCookie", $value, time()-3600
Ich glaube es ist nicht egal wo du das Cookie setzt:
anmerkung aus der doku:
Zitat:
Wie andere Header auch, müssen Cookies vor jeglicher Ausgabe Ihres Skriptes gesendet werde.
Zitat:
In PHP 3 werden mehrfache Aufrufe von setcookie() im selben Skript in umgekehrter Reihenfolge abgearbeitet. Sollten Sie also ein Cookie löschen wollen bevor Sie ein anderes setzen, sollten sie das Setzen vor dem Löschen vornehmen. Ab PHP 4 werden mehrfache Aufrufe von setcookie() in der Reihenfolge ihres Aufrufs ausgeführt
Antwort 2 von Mel vom 10.08.2019, 13:51 Options
aha,
das klingt gut. Das probier ich gleich mal aus und meld mich wieder zurück.
Auf welche Doku beziehst Du Dich?
Gruss und viieieieieiieieieilen Dank
Mel
Antwort 4 von Proggi vom 10.08.2019, 13:59 Options
jo ^^ danke hatte link vergessen
Antwort 5 von Mel vom 10.08.2019, 18:40 Options
ah, juut,
das les ich dann besser wohl auch dann gleich durch.
bis gleich
Mel
Antwort 6 von Mel vom 10.08.2019, 19:45 Options
Hmh,
setcookie("TestCookie", $value, time()-3600);
hab ich nun am Anfang der Datei vor jeglicher Ausgabe eingefügt, aber weder Opera noch Thunderbird will den Cookie löschen.
Da bekommt man ja echt einen Cookiehass ;-)
Vieleicht hat ja noch jemand ne Idee, warum die Browser auch den neuen setcookie-befehl anscheinend ignorieren.
Bis später
Schónen Abend noch
Mel
Antwort 7 von ClemBra vom 10.08.2019, 20:21 Options
mach mal
display_errors in der php.ini auf true (oder in einer htaccess)
und schreibe als erste Zeile
error_reporting(E_ALL);
dann sieht man das auch...
Antwort 8 von Mel vom 10.08.2019, 20:29 Options
Zitat:
mach mal
display_errors in der php.ini auf true (oder in einer htaccess)
und schreibe als erste Zeile
error_reporting(E_ALL);
dann sieht man das auch...
das hab ich schon...
Antwort 9 von Mel vom 10.08.2019, 20:30 Options
und es kommt keine Fehlermeldung..
Antwort 10 von Mel vom 10.08.2019, 20:51 Options
Ich habs jetzt endlich:
setcookie("TestCookie",'',time()-60000, '/');
lautet der Code, der bei mir in Opera und Mozilla funzt.
IE weiss ich nicht, denn ich find den Ort nciht, an dem der IE die Cookies speichert.
Was meint ihr zu diesem Code?
Komisch, dass dieser nun funktioniert.
Habe nur die Zeit erhöht und '/' ergánzt.
Vielen Dank für Eure Beiträge.
Bis dann
Mel
Antwort 11 von Mel vom 10.08.2019, 21:06 Options
Ich hab noch etwas Witziges entdeckt. Vielleicht interessiert es den einen oder anderen:
$_Cooki['testcookie'] = '';
löscht das Cookie auch.
Was haltet ihr denn von der Methode?
Scheint ja wohl am trivialsten von allen.
Warum denn dann so kompliziert mit negativen Zeitwerten usw., wenn man einfach das Sessioncookie auf diese Weise "entleeren" kann.
--> Sieht irgendjemand ein nachteil an dieser Alternative $_Cooki['testcookie'] = '';
?
Ich freu mich auf Eure Gedanken
Gruss und dann hiermti auch noch ein schönes Wochenende
Mel
Antwort 12 von ClemBra vom 11.08.2019, 13:14 Options
Bei einem Seitenaufruf werden zu setzende Cookies im Header der Antwort gesetzt, müssen also PHP bekannt sein, bevor der Header rausgesendet wird, und das ist beim ersten Zeichen (oder vielleicht mit einer flush-Methode).
Und dieser Header wird nur mit SetCookie gesetzt, alternativ mit header() von Hand, aber NICHT zu empfehlen.
Beim Aufruf der Seite werden die Cookies in $_COOKIE geschrieben. Wenn also bei einem Aufruf oben ein Cookie gesetzt / gelöscht wird, hat das KEINE Auswirkungen auf das Cookie-Array. D.h. ein Cookie ist gesetzt, es wird mit setcookie() gelöscht, ist aber immer noch in $_COOKIE vorhanden. Beim nächsten Aufruf der Seite oder einer anderen Seite ist es dann weg. Ebenso bleibt. beim setzen/ändern eines Cookies im $_COOKIE-Array der alte Wert erhalten.
Des weiteren sollte man keine Werte im $_COOKIE-Array ändern, ausnahme vielleicht direkt unter/über setcookie(), und zwar auf den gleichen Wert. Änderungen am $_COOKIE-Array haben KEINE (mir bekannten) auswirkungen auf das Cookie beim Client!
Dazu kommt: Du setzt ein Cookie aus einem Script, das z.B. auf der Seite
http://www.domain.tld/test/setcookie.php
so steht dieses unter
http://www.domain.tld/lese/cookie-test.php
NICHT zur Verfügung!
Liegt setcookie hingegen direkt im root-Verzeichnis, also unter http://www.domain.tld/setcookie.php so ist es auch in den Unterverzeichnissen verfügbar.
Und dieses Verhalten ist es wohl, was du durch das angefügte '/' im setcookie geändert hast.
Wenn ich von setzen rede, kannst du das auch durch löschen ersetzen. Die Regeln dafür sind die gleichen.
Und time() - 60000 kannst du auch durch eine einfache 0 ersetzen.
Antwort 13 von Mel vom 13.08.2019, 08:49 Options
Hallo ClemBra,
Vieiieieieiieilen lieben Dank für die lange Erklärung. Jetzt haben sich meine Fragen geklärt und hinzu hab ich es, dank der ausführlichen Schilderung, auch noch verstanden.
Super, super!
Ein grosses Dankeschön für den Beitrag
Gruss und eine stressfreie Woche
Mel
Antwort 14 von ClemBra vom 13.08.2019, 20:43 Options
Da freut man sich doch gleich, wenn einem für die Tipparbeit gedankt wird.
Viel Erfolg weiterhin und eine stressfreie Woche zurück
Clemens
Antwort 15 von Mel vom 14.08.2019, 17:33 Options
Gerne !