Programmieren mit PHP, Teil 2 Website-Settings und -Sitzungen per Cookie speichern

Autor / Redakteur: Thomas Joos / Stephan Augsten

Wer Webseiten mit PHP zur Verfügung stellt, sollte sich mit Cookies auseinandersetzen. Cookies ermöglichen das Speichern von Voreinstellungen, die ein Benutzer für eine Webseite gesetzt hat. Dazu gehören Sprache und Ansicht, aber zum Beispiel auch der Inhalt eines Warenkorbs in Online-Shops

Anbieter zum Thema

Die lokale Cookie-Verwaltung über den Browser ist nur eine Seite der Medaille, auch serverseitig stehen dievrse Funktionen zur Verfügung.
Die lokale Cookie-Verwaltung über den Browser ist nur eine Seite der Medaille, auch serverseitig stehen dievrse Funktionen zur Verfügung.
(Bild: Joos / Chrome)

Surft ein Anwender im Internet, verlässt er Webseiten häufig nur temporär und kehrt irgendwann einmal zurück. In diesem Fall ist es sinnvoll, seine Voreinstellungen wieder so vorzugeben, wie er diese beim ersten Besuch gesetzt hat.

Der Nutzer fühlt sich dann gleich wieder heimisch und bleibt mitunter länger auf der Seite. Bei Shopping-Portalen steigt außerdem die Chance, dass er Ware einkauft. Auch der Inhalt von Formularen, wie zum Beispiel der Name eines Anwenders kann gespeichert werden.

Besucht ein Anwender die Seite erneut, wird der mit seinem Namen begrüßt. Es gibt natürlich eine Vielzahl weiterer Einsatzmöglichkeiten von Cookies.

Cookies mit PHP nutzen

Cookies können den Inhalt von Online-Formularen auslesen und abspeichern. Mit der Funktion „setcookie“ kann zum Beispiel eine Variable ausgelesen werden, die einen Wert enthält, den ein Benutzer in einem Formular ausgefüllt hat.

Beim Erstellen eines Cookies wird dessen Namen festgelegt, welche Daten er enthalten soll und wie lange er gültig sein soll. Das erfolgt zum Beispiel mit:

setcookie (‚Name‘, $Name, time() +8500);

Mit „setcookie()“ lassen sich Cookies also definieren. Das Cookie wird mit dem HTTP-Header übertragen. Aus diesem Grund muss diese Funktion aufgerufen werden, bevor Skripte gestartet werden. Für die Speicherung des Zeit kann die „Time()“-Funktion genutzt werden.

Um Cookies auszulesen, wird zum Beispiel die reservierte Variable „$_COOKIE[<Name des Cookies>]“ verwendet. Dabei handelt es sich um ein globales, assoziatives Array von Variablen. Die Variable „$_COOKIE“ ist automatisch global. Sie muss nicht erst definiert werden.

Ein Beispiel dafür ist:

<?php
echo 'Hello ' . htmlspecialchars($_COOKIE["name"]) . '!';
?>

Es ist natürlich sinnvoll, vorher mit ...

if (isset($_COOKIE[<Name>]))

... zu überprüfen, ob ein bestimmtes Cookie überhaupt gesetzt ist, bevor es mit „$_COOKIE“ aufgerufen wird.

Das ist beim Einsatz von Cookies wichtig

Um Cookies zu nutzen, müssen diese also zuerst mit „setcookie“ gesetzt werden. Dabei werden der Name, der Wert und die Gültigkeitsdauer des Cookies übergeben. Genutzt werden Cookies anschließend über „$_COOKIE“. Bei der setcookie()-Funktion stehen verschiedene Parameter zur Verfügung:

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = FALSE [, bool $httponly = FALSE ]]]]]] )

Dabei muss der Name des Cookies immer angegeben werden, alle anderen Parameter sind optional. Der Wert und die Gültigkeitsdauer sind also dementsprechend nicht obligatorisch, aber natürlich dennoch wichtig für einen Cookie. Ohne das Angeben der Gültigkeitsdauer werden Cookies beim Beenden des Browsers gelöscht.

Beim Erstellen eines Cookies lässt sich mit „domain“ festlegen, für welche Domäne der Internetseite der Cookie und dessen Daten gültig sein sollen. Mit dem Parameter „secure“ wird sichergestellt, dass der Cookie nur über HTTPS gesendet wird. Mit der Option „httponly“ wird hingegen erreicht, dass das Cookie nur über HTTP genutzt werden kann. Ein Auslesen mit Javascript ist in diesem Fall nicht möglich.

Gültigkeitsdauer von Cookies definieren

Die Gültigkeitsdauer eines Cookies kann aber nicht nur über die time()-Funktion genutzt werden. Auch mit der Funktion „strtotime“ lässt sich an dieser Stelle arbeiten:

int strtotime ( string $time [, int $now = time() ] )

Diese Funktion wandelt englische Zeitangaben in den Unix-Zeitstempel um. Das ermöglicht eine einfachere Angabe, als eine direkte Übergabe des Zeitstempels, da hier nicht sofort ersichtlich ist, wie lange ein Cookie gültig ist.

Auch das Verwenden der „DateTime“-Klasse ist in Verbindung mit dem Cookie möglich. Hier können das Datum und die Uhrzeit, zu dem Cookie ablaufen soll, exakt definiert werden. Dabei stehen auch vordefinierte Konstanten für Cookies zur Verfügung:

DateTime::COOKIE
DATE_COOKIE
HTTP Cookies (Beispiel: Monday, 2019-Aug-05 15:52:01 UTC)

Das Datum lässt sich aber auch als Variable speichern und dann mit „setcookie“ umwandeln. Wird zum Beispiel das Datum als „$d“ gespeichert, erfolgt in setcookie die Formatierung mit …

$d->format(„U“)

… zu einem Zeitstempel.

Cookies verwalten sowie im Browser nutzen und steuern

Einmal gesetzte Cookies lassen sich natürlich auch verwalten. Die gespeicherten Cookies werden auch dem PC des Anwenders gespeichert. Hier sind die Dateien zu sehen, in denen die Daten des Cookies gespeichert werden. In der Verwaltung von Cookies in den einzelnen Browser sind auch die Namen des Cookies zu sehen. Hier wird der Name gespeichert, der für den Cookie definiert wurde. Anwender können natürlich selbst Cookies verwalten, also auch löschen.

Cookies sind Browser-spezifisch. Wird ein Cookie für einen Browser gespeichert, ist er für einen anderen Browser natürlich nicht gültig. In Browsern kann über die Entwicklungstools angezeigt werden, wie die Speicherung des Cookies erfolgt. Die Entwicklungstools stehen in allen bekannten Browsern zur Verfügung.

Cookies löschen

Verschiedene Browser-Funktionen erlauben es dem Anwender, seine Cookies zu verwalten und zu löschen. Auf der anderen Seite kann ein Cookie aber über PHP auch serverseitig gelöscht werden, wenn ein Anwender eine Seite erneut besucht. Ein einfacher Weg, ein Cookie unbrauchbar zu machen, besteht darin, mit „setcookie“ das Cookie neu zu definieren, keinen Wert festzulegen und die Gültigkeitsdauer in der Vergangenheit festzulegen, zum Beispiel mit:

setcookie („Name“, „“, 1).

(ID:45480313)