Derzeit online: ca. 75 User  
Spenden via PayPal PHP für dich ist auch als Buch erhältlich - im handlichen Format, zum Nachschlagen, Mitnehmen oder gemütlichen nebenbei Lesen. Mit noch mehr Informationen, zusätzlichen Beispielen und Übungsaufgaben.
Jetzt in der aktualisierten Version bei Amazon oder BoD bestellen!


Schnipsel

PHP - Cookies mit PHP

Wer benutzerspezifische Daten nicht nur für die Dauer einer Session abspeichern will, wird auf Cookies zurück greifen müssen. Sie sind allerdings etwas unkomfortabler zu benutzen als Sessions.

Gesetzt wird das Cookie über setcookie. Benötigte Angaben sind der Cookiename, sowie ein Wert des Cookies. Ebenfalls ratsam ist eine Gültigkeitsdauer (ansonsten wird es nach dem Schließen des Browsers gelöscht).

Mögliche weitere Angaben - auf die ich hier aber nicht näher eingehen werde - sind Pfadangaben, sowie Server, die zum Lesen berechtigt sind, sowie ein Sicherheitsschalter (also gesetzt oder nicht gesetzt), mit dem festgelegt werden kann, dass das Cookie nur bei einer sicheren Verbindung (z. B. https) gesetzt wird.

Praktisch sieht das dann so aus:
setcookie("phpfuerdich_cookie","Werte",time()+3600);
Damit wird ein Cookie mit dem Namen phpfuerdich_cookie gesetzt, dass als Wert das Wort "Werte" enthält und eine Stunde gültig ist. Wichtig ist, dass vor dem Setzen des Cookies kein anderer Code ausgegeben werden darf, der in der Datei angezeigt wird. Also keine Leerzeile, kein Leerzeichen oder sonst nichts. Möglich sind hingegen reine Code-Zeilen ohne Ausgabe (also z. B. eine Abfrage, um den gewünschten Wert festzulegen).

Die Gültigkeitsdauer ergibt sich aus der aktuellen Uhrzeit (als Timestamp, daher time()) plus der Dauer in Sekunden. In dem Fall 3600 Sekunden, also eine Stunde. Für eine Gültigkeitsdauer von einem Tag wird dann entsprechend time()+3600*24 verwendet.

Der Wert des Cookies ist über eine (fast) ganz normale Variable verfügbar:
$_COOKIE["phpfuerdich_cookie"]
Der Aufbau ist also entsprechend Post- oder Get-Variablen.

Das Problem bei Cookies ist, dass der Wert einfach als ganz normale Zeichenkette gespeichert wird. Mag man also mehrere Werte haben, dann wird es ein wenig umständlicher.

Ich habe dafür eine ziemlich simple Methode verwendet, indem ich die einzelnen Werte mit Trennzeichen versehen habe und daraus dann beim Einlesen mit Hilfe der Funktion explode ein Array gebildet habe.

Das sieht dann z. B. so aus:
$werte = "Name|Strasse|PLZ|Ort";
setcookie("adressliste_cookie",$werte,time()+3600*24*30);
Damit wird ein Cookie mit verschiedenen Werten gesetzt, das 31 Tage gültig ist. Ich verwende als Trennzeichen gerne |, aber es sind natürlich auch viele andere möglich. Komma und Semikolon finde ich nicht so empfehlenswert, da sie schon mal in den Werten selbst vorkommen können.

Das Auslesen funktioniert dann so:
$wertarray = explode("|",$_COOKIE["adressliste_cookie"]);
Name ist dann über $wertarray[0] abrufbar, Strasse über $wertarray[1] usw.

Nicht vergessen, dass Arrays immer mit 0 anfangen!

Wer das Cookie löschen will ruft einfach setcookie nur mit der Namensangabe des Cookies auf:
setcookie("adressliste_cookie");
Auf php.net wird empfohlen, es ohne Wertangaben (also nur "") und mit negativer Geltungsdauer aufzurufen, damit es auch sicher gelöscht wird. Das sieht dann so aus:
setcookie("adressliste_cookie","",time()-3600);
(Es ist natürlich auch jede andere negative Geltungsdauer möglich.)

Autor: Claudia Unkelbach
© 2001 - 2017 Claudia Unkelbach
Gießener Straße 75, 35396 Gießen