1. Was sind Cookies
Als Cookies werden Textzeilen bezeichnet die der Browser zusätzlich zu einer Anfrage
an den Server schickt. Diese Textzeilen sehen dabei wie Zuweisungen aus, ein Beispiel
wäre UserID=10
. Hierbei spricht man davon dass der Cookie UserID
den Wert 10
hat. Des Weiteren haben Cookies ein Haltbarkeitsdatum,
welches angibt wie lange ein Cookie beim Client gespeichert werden soll. Wenn kein
Zeitpunkt zum Löschen angegeben wurde wird ein Cookie automatisch beim Beenden des
Browsers gelöscht.
Jeder Browser entscheidet selbst anhand seiner Einstellungen wie und wie lange Cookies gespeichert werden und ob. Das Verhalten kann entsprechend auch nicht von einem PHP-Skript verändert werden. Wenn ein PHP-Skript ein Cookie zum Client sendet ist nicht sichergestellt dass dieser den Cookie auch wirklich speichert. Erst beim nächsten Aufruf eines Skriptes (neuladen, link folgen, url eingeben, etc.) kann überprüft werden ob der Client/Browser den Cookie gespeichert hat oder nicht, nämlich ob er den Cookie den er gespeichert hat zum Server gesendet hat oder nicht.
2. Erzeugen von Cookies
Cookies werden in PHP mit der Funktion setcookie erzeugt. Diese Funktion ergänzt dabei die Header-Angaben. Dies bedeutet das Cookies nur dann gesendet werden können wenn vorher keine Ausgabe vorhanden ist, wie z.B. echo oder HTML-Code. Der erste Parameter ist der Name des Cookies, der zweite Parameter ist der Wert.
<?php
setcookie("UserID", "10");
?>
So ein Cookie bleibt so lange beim Client gespeichert bis der Browser geschlossen wird. Wenn ein Cookie länger gespeichert bleiben soll muss der Zeitpunkt des löschens explizit angegeben werden.
<?php
setcookie("UserID", "10", time()+60*60*24); // 1 Tag
setcookie("Foo", "Bar", time()+60); // 1 Minute
?>
3. Auslesen von Cookies
Cookies die der Client zum Browser schickt werden im Array $_COOKIE
gespeichert. Der Schlüssel ist der Name vom Cookie und der Wert des Arrayelements
ist der Wert des Cookies. Aus der Cookie-Zeile UserID=5
wird
somit $_COOKIE['UserID'] = '5'
. Die Werte sind dabei entweder
Strings oder Arrays.
<?php
// bei einem Cookie "Foo=Bar"
var_dump($_COOKIE['Foo']); // gibt string(3) "Bar" aus
// bei folgenden Cookies:
// "Bla[]=10"
// "Bla[]=x"
var_dump($_COOKIE['Bla']);
// Ausgabe ist:
// array(2) {
// [0] =>
// string(2) "10"
// [1] =>
// string(1) "x"
// }
?>
Cookies können nur ausgelesen werden wenn der Browser diese sendet. Dies
bedeutet auch dass ein Cookie nicht direkt im Array $_COOKIE
vorhanden ist, nachdem die setcookie-Funktion aufgerufen wurde.
<?php
setcookie("Name", "Wert");
echo $_COOKIE['Name']; // wird nicht klappen (es sei denn ein solcher Cookie wurde bereits vom Client gesendet)
?>
Ein setcookie-Aufruf sendet die Anforderung an dem Client
ein Cookie zu speichern, daher kann das $_COOKIE
-Array nicht direkt mit
diesem Cookie gefüllt sein. Dafür müsste der Browser eine Zeitreise machen und seine
Anfrage zum Server ändern damit auch dieser Cookie mitgesendet wird.
Um zu gucken ob überhaupt ein Cookie gesendet wurde kann die Funktion isset verwendet werden. Erst nach der Überprüfung sollte auf ein Cookiewert zugegriffen werden um Fehlermeldungen zu vermeiden.
4. Löschen eines Cookies
In PHP gibt es keine spezielle Funktion um ein Cookie zu löschen, daher wird für diesen Zweck auch die Funktion setcookie verwendet. Damit ein Cookie gelöscht wird setzt man das Haltbarkeitsdatum auf einen Punkt in der Vergangenheit. Sicherheitshalber sollte man den Wert selbst auf einen ungültigen Wert setzen, wie z.B. ein leerer String.
<?php
setcookie("Name", "", time()-60*60*24);
?>
5. Gefahren von Außen
Da Cookies beim Client gespeichert sind und somit außerhalb der Gewalt
der PHP-Skripte liegen darf solchen Werten nicht vertraut werden. Ein Cookie
login=1
sollte daher z.B. nicht reichen in ein gesichertes
System zu kommen. Des Weiteren sollte nicht auf gültige Werte vertraut werden.
Ein Wert der z.B. eine Zahl sein sollte muss auch darauf geprüft werden.