Cookies

Cookies werden häufig nur als lästig betrachtet, aber sie sind notwendig, um zwischen den Seitenaufrufen Informationen zu speichern.

Betrachten wir den Onlineshop eines Lieferdienstes. Auf der ersten Seite stehen uns diverse Speisen zu Auswahl, und wir wählen unser Lieblingsgericht. Als Nächstes möchten wir noch etwas zu trinken dazu bestellen und rufen die Seite mit der Getränkeauswahl auf. Genau hier benötigen wir Cookies. Die Informationen über das gewählte Gericht werden als Cookie zwischengespeichert. HTTP ist ein Protokoll, welches nicht in der Lage ist, sich solche Informationen zu merken, also greifen wir auf diese kleinen Textdateien zurück, die als Cookies bezeichnet werden.


Vorbereitung

PHP unterstütz Cookies ohne irgendwelche zusätzlichen Plugins, jedoch sind die Einstellungen im Umgang mit Cookies von Browser zu Browser unterschiedlich. Der Unterschied im Umgang mit Cookies liegt meistens darin, dass entweder Warnmeldungen erscheinen, wenn neue Cookies gesetzt werden oder der Umgang mit Cookies von Anfang an automatisch aktiviert ist. Die Einstellungen können in jedem Browser vom Benutzer angepasst werden, die Menüführung der Browser ist unterschiedlich. Aber die entscheidenden Einstellungen finden sich in etwa bei: Extras - Einstellungen - Datenschutz – Cookies oder so ähnlich.


Was ist ein Cookie

Bei Cookies handelt es sich um Informationen in Textform, die zwischen dem Webserver und dem Browser hin und her geschickt werden. Die Übertragung erfolgt in etwa in der Form: "Set-Cookie: Speisen=Cheeseburger" über den HTTP-Header des Dokuments. Der Browser handelt dann je nachdem welche Einstellungen gesetzt sind.

  • Cookie wird gespeichert
  • Cookie wird abgelehnt

Der Benutzer wird gefragt, ob das Cookie gespeichert oder abgelehnt werden soll. Der Server hat an dieser Stelle keine Ahnung, ob die Cookies gespeichert oder abgelehnt wurden. Daher wird es erst interessant wenn der Browser eine weitere Anfrage an den Server sendet. Bei dieser Anfrage wird das Cookie nämlich an den Server mitgeschickt "Cookie: Speisen=Cheeseburger" und der Server kann daran den Benutzer identifizieren. Wie mit den gespeicherten Cookies umgegangen wird, ist wieder vom Browser abhängig. Möglich wäre das dauerhafte Speichern auf der Festplatte des Systems oder eine vorübergehende Speicherung im Systemspeicher mit dem Verlust der Daten nach einem Neustart.


Einschränkungen

Eine der wichtigsten Einschränkungen ist wohl der Zugriff auf Cookies. Ein Cookie kann nur von dem Server aus gelesen werden, der ihn auch gesetzt hat. Ein Cookie von "cindiy.de" ist also nicht von "example.com" sichtbar und umgekehrt. Cookies können aber an eine Second-Level-Domain gebunden werden. Beispiel: Die Cookie Domain (beginnend mit einem Punkt) wird mit .example.com angegeben, jetzt ist das Cookie nicht nur von www.example.com erreichbar, sondern auch von mail.example.com usw. Das Cookie kann aber auch auf einen Pfad beschränkt werden, ein Cookie von www.example.com/start ist dann von www.example.com/news aus nicht sichtbar und umgekehrt.

Die Datenmengen, die gespeichert werden können, sind auf 4 KByte (4096 Zeichen) pro Cookie beschränkt. Sollte das Cookie größer sein, wird der Überschuss einfach abgetrennt, damit die 4096 Zeichen nicht überschritten werden.

Weil der Speicher früher nicht annähernd in solchen Mengen vorhanden war, wie es heute der Fall ist, tragen Webbrowser teilweise noch eine Altlast mit sich rum. Um nicht übermäßig viel Speicher einzunehmen, müssen Webbrowser nur mindestens 300 Cookies insgesamt Speicher und dürfen den 301. Cookie, der als ältester identifiziert wird, entfernen. Der Speicher von Cookies einer Domain ist sogar auf 20 beschränkt. Heutzutage sehen die meisten Browser das mit dem Speicher allerdings etwas lockerer.


Der gläserne Surfer

Viele Nutzer fürchten den Cookies, weil sie Angst haben, zwangsläufig etwas über Privatsphäre freigeben zu müssen oder das der Zugriff auf andere Daten Ihrer Festplatte erfolgt usw. Grund dafür sind unter anderem nicht geprüfte Aussagen von Leuten, die mit gefährlichem Halbwissen den Ruf der Technologie schaden. Die meisten Internetnutzer würden sicherlich zustimmen, wenn man Sie fragen würde, ob Cookies unsicher sind. Fragt man die gleichen Personen, was Cookies sind und wie sie funktionieren, wird man aber nur in den wenigsten Fällen eine zufriedenstellende Antwort erhalten. Leider ist es für die Cookies schwer, diese Vorurteile zu bereinigen, obwohl es technisch relativ einfach zu beweisen ist, wie Cookies wirklich arbeiten.


Mit Cookies in PHP arbeiten

Das Lesen und Schreiben der Cookies erfolgt über den HTTP-Header.


Cookies setzen

Um Cookies zu setzen, verwenden wir die Funktion "setcookie()" mit der folgenden Syntax:

Syntax von Cookies

setcookie(name, value, expire, path, domain, secure, httponly);
Bezeichnung Bedeutung
name Der Name des Cookies, das einzige Pflichtfeld bei Cookies
value Der Wert des Cookies
expire Das Ablaufdatum des Cookies, als Sekunden seit dem 01.01.1970
path Das Verzeichnis, aus dem das Cookie ausgelesen werden darf
domain Die Domain, die Zugriff auf das Cookie hat
secure Gibt an, ob das Cookie nur über HTTPS verschickt werden darf
httponly Gibt an ob das Cookie für JavaScript sichtbar oder unsichtbar ist

Name und Wert vom Cookie sollten soweit klar sein. Der Wert kann bequem als Variable eingesetzt werden.

Cookie setzen

$auswahl = "Salamipizza";
setcookie("Speisen", $auswahl);

Ablaufdatum

Beim Ablaufdatum unterscheiden wir zwischen temporäre Cookies und permanente Cookies. Die temporären Cookies oder auch Session-Cookies genannt, sind nur solange gültig, bis der Browser geschlossen wird. Die permanenten Cookies oder auch persistente Cookies genannt, sind bis zum Ablauf eines festgelegten Datums gültig. Das Ablaufdatum wird als Integerwert auf Basis der Unixzeit (vergangene Sekunden seit dem 01.01.1970) definiert. Um schnell einen gültigen Zeitwert zu errechnen, verwenden wir die Funktion "time()", die uns die aktuelle Zeitspanne meldet, die seit dem 01.01.1970 um 00:00:00 Uhr vergangen ist. Diesem Wert hängen wir nur noch die Gültigkeitsdauer in Sekunden an. Im Beispiel setzen wir die Gültigkeit auf exakt einen Tag.

Gültigkeit des Cookie setzen

time() + 60 * 60 * 24;

Mit der Funktion "mktime()" können wir auch ein bestimmtes Datum festlegen. Im Beispiel setzen wir eine Gültigkeit auf genau ein Jahr, also auf den 22.08.2026 um 08:51 Uhr.

Gültigkeit des Cookie auf ein Jahr setzen

mktime(08, 51, 31, 08, 22, 2026;

Der Rückgabewert ist die Anzahl der Sekunden vom 01.01.1970 bis zum gesetzten Zeitpunkt.

Ein Cookie ohne dritten Parameter oder mit dem Wert "null" als dritten Parameter ist ein temporäres Cookie und verliert seine Gültigkeit, sobald der Browser geschlossen wird.


Pfad

Das Verzeichnis, in dem das Cookie gesetzt wird, wird gleichzeitig als Wert für den Cookie-Pfad verwendet. Ein Cookie, welches von www.example.com/news/wirtschaft gesetzt wird, kann nicht von www.example.com gelesen werden. Daher ist es ratsam, den Pfad auf das Hauptverzeichnis zu setzen ("/").

Cookie auf Hauptverzeichnis setzen

setcookie("Speisen", $auswahl, time() + 60*60*24, "/");

Ebenfalls kann durch die Pfadangabe ein Gültigkeitsbereich erschaffen werden, welcher Performancevorteile mit sich bringen kann.


Domain

Der fünfte Parameter beschreibt die Domain, die Zugriff auf das Cookie hat. Wird dieser nicht angegeben, bedient sich der Browser meistens direkt aus der URL. Das kann zu Problemen führen, wenn die Seite über die IP und nicht über die Domain aufgerufen wird, denn der Zugriff auf die Cookies ist dann nur über die IP erlaubt. Ein Zugriff auf die Cookies von allen Subdomains aus könnte so aussehen.

Cookie auf Domain setzen

setcookie("Speisen", $auswahl, time() + 60*60*24, "/", ".example.com");

Sicherheit

Der sechste Parameter steht für die Sicherheit und beschreibt, ob das Cookie über HTTP oder HTTPS verschickt werden soll. Ist der Parameter "true", erfolgt die Übertragung nur über HTTPS, dafür wird aber noch ein HTTPS-fähiger Webserver vorausgesetzt.

Cookie für HTTP / HTTPS setzen

setcookie("Speisen", $auswahl, time() + 60*60*24, "/", ".example.com", true);

Gerade im Umgang mit sensiblen Daten ist diese Übertragung zu bevorzugen.


httponly

Um seine Webanwendung gegen Angreifer zu schützen und den Zugriff auf Cookies durch JavaScript zu unterbinden, wurde ein letzter Parameter eingeführt.

Cookie gegen JavaScript schützen

setcookie("Speisen", $auswahl, time() + 60*60*24, "/", ".example.com", true, true);

Ist dieser auf "true" gesetzt, ist ein Zugriff von JavaScript auf das Cookie nicht möglich.


Zeitlicher Ablauf

Durch eine rechtzeitige Verarbeitung der Cookies können wir unnötige Fehlermeldungen aus dem Weg gehen. Dazu ist es wichtig, die Cookies zu setzen, noch bevor der HTML-Code ausgegeben wird.

Cookie rechtzeitig setzen

<?php
$auswahl = "Salamipizza";
setcookie("Speisen", $auswahl, time() + 60*60*24, "/", ".example.com", true, true);
?>
<html>
<head>

Cookies auslesen

PHP liest alle Cookies aus, die vom Browser an den Server gesendet werden. Diese stehen dann über das globale Array "$_COOKIE" zur Verfügung. Über "print_r($_COOKIE)" können wir uns die gesetzten Cookies der Seite ausgeben lassen.

Cookie rechtzeitig setzen

setcookie("Speisen", "Cheeseburger", time() + 60*60*24, "/");
setcookie("Getraenke", "Wasser", time() + 60*60*24, "/");
setcookie("Dessert", "Erdbeer-Dessert", time() + 60*60*24, "/");
print_r($_COOKIE);

Um auf ein bestimmtes Cookie zugreifen zu können, rufen wir zusätzlich noch den Namen des Cookies auf.

Bestimmte Cookies aufrufen

echo $_COOKIE["Speisen"];

Wenn der aufgerufene Name nicht (mehr) existiert, wird eine Fehlermeldung ausgegeben. Daher ist es sinnvoll, vorher zu überprüfen, ob der Cookie existiert.

Cookie auf existenz prüfen

if (array_key_exists("Speisen", $_COOKIE)) {
 echo $_COOKIE["Speisen"];
} else {
 echo "Kein Cookie mit dem Name gefunden!";
}

Die Überprüfung kann auch mit den Funktionen "empty()" oder "isset()" durchgeführt werden. An den Server werden nur der Cookie-Name und der Cookie-Wert geschickt. Die Eigenschaften wie Pfad oder Ablaufdatum bleiben clientseitig abgespeichert.


Cookies löschen

Je nach Anwendungsbereich kann es sinnvoll sein, Cookies auch wieder zu löschen, beispielsweise wenn der Nutzer in einem geschützten System eingeloggt ist. Am einfachsten ist es wohl, das Ablaufdatum des Cookies in die Vergangenheit zu setzen. Dadurch löschte der Browser das Cookie aus dem Cookie-Speicher.

Cookie löschen

setcookie("login", "Zugriff erlaubt", 0, "/");
Hinweis

Wenn der Wert eines Cookies verändert werden soll, dann muss dazu das Cookie mit denselben Parametern angegeben werden, wie es erstellt wurde. Mit Ausnahme von Ablaufdatum und dem Wert, diese sollen ja eventuell geändert werden. Wenn beispielsweise der Parameter für den Pfad weggelassen wird, dann wird einfach ein neues Cookie zusätzlich mit demselben Namen erzeugt.


Zurück zur PHP Startseite Weiter mit Datenbanken - SQL