Sessions und Cookies
Sessions und Cookies erlauben es, Variablen anfrageübergreifend zu speichern.
Session
Sessions erlauben es, Variablen innerhalb einer Sitzung zu speichern. Die Sitzung erstreckt sich vom expliziten Start der
Session bis zur expliziten Zerstörung der Session oder dem Schließen des Browsers. Um eine Session zu starten, muss die
Funktion session_start()
aufgerufen werden. In jeder Datei, in welcher auf die Session-Variablen lesend oder
schreibend zugegriffen werden muss, muss die Funktion session_start()
aufgerufen werden. Einzelne Session-Variablen
existieren natürlich erst ab dem Zeitpunkt, ab dem diese das erste Mal zugewiesen (initialisiert) wurden. Wenn Sie prüfen
möchten, ob eine Session-Variable existiert, können Sie die Funktion isset()
verwenden. Möchten Sie einzelne
Session-Variablen wieder löschen, so können Sie die Funktion unset()
nutzen, welcher Sie die zu löschende
Variable übergeben müssen. Sollen alle Session-Variablen und somit die komplette Session gelöscht werden, so können Sie
die Funktion session_destroy()
aufrufen.
Beim ersten Aufruf der Funktion session_start()
wird vom PHP-Interpreter eine sogenannte Session-ID erzeugt.
Diese wird dann verwendet, um den Besucher zu identifizieren. Die ID kann entweder in der URL mitgegeben werden oder
beim Besucher mittels eines Cookies gespeichert werden. In den meisten Fällen wird die Cookie-Variante verwendet, weil die
andere einige Probleme mit sich bringt, weshalb wir auf diese auch nicht näher eingehen. Bei der Cookie-Variante wird beim
Setzen des Cookies dem Browser mitgeteilt, dass das Cookie nur während dieser Browsersitzung gültig ist, weshalb der
Browser das Cookie nicht zwingend als Datei abspeichern muss. Das Cookie für die Session-ID trägt standardmäßig den Namen
PHPSESSID
. Die Werte der Session-Variablen können vom Benutzer nicht betrachtet und nicht manipuliert werden,
da diese auf dem Server gespeichert sind. Der Zugriff auf die Session-Variablen erfolgt mittels des superglobalen
assoziativen Arrays $_SESSION
. Im folgenden Beispiel werden die Formulareingaben (Vorname und Nachname) in einer
Session gespeichert. Rufen Sie die Seite auf, füllen Sie das Formular aus, schließen Sie die Seite, rufen Sie diese erneut
auf und Sie werden feststellen, dass Ihre Formulareingaben immer noch da sind. Wenn Sie den Browser schließen und die Seite
erneut aufrufen, so werden Sie feststellen, dass die Formularfelder wieder leer sind.
<?php session_start(); if (isset($_POST['vorname']) && isset($_POST['nachname'])) { $_SESSION['vorname'] = $_POST['vorname']; $_SESSION['nachname'] = $_POST['nachname']; } ?>
<form action="session.php" method="post"> <table> <tr> <td style="width: 100px;">Vorname:</td> <td><input type="text" name="vorname" value="<?php echo (isset($_SESSION['vorname']) ? $_SESSION['vorname'] : ''); ?>" /></td> </tr> <tr> <td style="width: 100px;">Nachname:</td> <td><input type="text" name="nachname" value="<?php echo (isset($_SESSION['nachname']) ? $_SESSION['nachname'] : ''); ?>" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Session schreiben" /></td> </tr> </table> </form>
Cookie
Bei einem Cookie (zu Deutsch Keks) handelt es sich vereinfacht dargestellt um eine Textdatei, welche auf dem Computer
des Besuchers gespeichert wird. Ein Cookie ist so lange gültig wie angegeben, dies kann nur die aktuelle Browsersitzung sein
(wie z. B. bei dem Session-ID-Cookie) oder bis zu einem bestimmten angegebenen Zeitpunkt. Cookies werden vom Webserver gesetzt
und können in PHP mittels der Funktion setcookie()
gesetzt werden. Der Funktion wird der Cookie-Name, der Cookie-Wert,
die Gültigkeit, der Pfad, die Domain, ein Wert zur Angabe, ob das Cookie nur bei HTTPS gesendet werden soll, und ein Wert zur
Angabe, ob das Cookie nur per HTTP erreichbar ist, übergeben. Alle Parameter, abgesehen vom ersten Parameter für den Cookie-Namen,
sind optional. Für gewöhnlich werden jedoch auch noch die Parameter für den Cookie-Wert und die Gültigkeit mit übergeben. Die
anderen Parameter werden seltener benötigt. Dem Gültigkeits-Parameter wird ein UNIX-Zeitstempel übergeben, um somit die
Ablaufzeit des Cookies festzulegen. Wird hier 0 übergeben, so gilt das Cookie nur bis zum Ende der Browsersitzung. Um
ein Cookie zu löschen, übergeben Sie als Ablaufzeitpunkt einen abgelaufenen Zeitstempel (z. B. time() - 3600
).
Mit dem Pfad- und Domain-Parameter ist es möglich, den Gültigkeitsort des Cookies zu verändern. Standardmäßig gilt ein
Cookie nur für das aktuelle Verzeichnis und deren Unterverzeichnisse. Der Aufruf der Funktion setcookie()
muss,
wie der Aufruf der Funktion header()
, erfolgen, bevor irgendeine Art von Ausgabe gesendet wird. Nachdem ein Cookie
gesetzt wurde, wird dessen Wert bei einer Anfrage vom Browser an den Server geschickt. In PHP kann auf den Cookie-Wert
mittels des superglobalen assoziativen Arrays $_COOKIE
zugegriffen werden. Das folgende Beispiel ist mit dem obigen
Beispiel für Sessions vergleichbar. Zur Speicherung der Formulardaten werden jedoch die Cookies vorname
und
nachname
verwendet, welche für 1 Stunde gültig sind.
<?php if (isset($_POST['vorname']) && isset($_POST['nachname'])) { // Aktuelle Werte lokal merken $vorname = $_POST['vorname']; $nachname = $_POST['nachname']; // Cookies schreiben setcookie('vorname', $vorname, time() + 3600); setcookie('nachname', $nachname, time() + 3600); } else { // Aktuelle Werte wenn verfügbar aus Cookie laden $vorname = isset($_COOKIE['vorname']) ? $_COOKIE['vorname'] : ''; $nachname = isset($_COOKIE['nachname']) ? $_COOKIE['nachname'] : ''; } ?>
<form action="cookie.php" method="post"> <table> <tr> <td style="width: 100px;">Vorname:</td> <td><input type="text" name="vorname" value="<?php echo $vorname; ?>" /></td> </tr> <tr> <td style="width: 100px;">Nachname:</td> <td><input type="text" name="nachname" value="<?php echo $nachname; ?>" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Cookie schreiben" /></td> </tr> </table> </form>