PHP-Session

Cookies

Der Webserver muss einen bestimmten Client eindeutig identifizieren, bevor er die individuellen Session-Daten diesen Clients weiter verwendet. Dazu wird beim Client eine kleine Textdatei mit einem eindeutigen Schlüssel temporär gespeichert, das Cookie.
Jedes Browser-Programm bietet einstellbare Optionen:



Links zu den Session-Demo-Seiten

session-1.php
session-2.php
session-3.php

PHP-Quelltext der Demo-Seiten

Der Quelltext ist relativ umfangreich, weil mit den Demo-Seiten gleich mehrere typische Anwendungen von Session-Daten vorgestellt werden.
In den folgenden Kapitel werden einige der Details einzeln dargestellt.

Im ← Quelltext sehen sie nicht, dass die Session bereits in dieser Seite mit
<?php
session_start();
$_SESSION['allow'] = 1;
?>
gestartet und das Array-Element mit dem Schlüssel (key) allow definiert wurde.
Jede der Demo-Seiten prüft, ob dieses Element definiert ist: Wenn das nicht der Fall ist, dann wird ihr Browser zu einer Fehler-Seite weitergeleitet.

• Einige Session-Variable werden automatisch verwaltet:
Zeitpunkt zu Beginn der Demo
Zähler für alle besuchten Demo-PHP-Seiten.
Individuelle Zähler für jede einzelne Demo-Seite.

• Eine Session-Variable 'myname' kann man mit einem HTML-Formular selbst verwalten.

Typische Session-Aufgaben

Beginn und Ende einer Session

Mit der Funktion session_start() wird eine Session begonnen. Diese Anweisung sollte in der 1.Zeile einer Datei stehen, jedenfalls noch vor irgendeiner Ausgabe (mit Funktion echo() oder print() ).

Um alle Session-Daten zu löschen, verwendet man die Funktion session_unset(). Das ist jedoch nur selten gewünscht oder notwendig.


Theorie und Praxis

Die Anweisung session_start() sollte ignoriert werden, wenn bereits vorher eine Session begonnen wurde. In der Praxis wird manchmal trotz sauberer Konfiguration von PHP eine Warnung angezeigt.
Das Beispiel links zeigt, wie man die Warnung auch in hartnäckigen Fällen unterdrücken kann.


Zugriff auf ein Session-Element

Das Beispiel zeigt die typische Vorgangsweise:
• Mit Funktion isset() wird geprüft, ob ein Array-Element mit dem betreffenden Schlüssel (hier 'key') bereits existiert.
Sie sollten diesen Test in jedem Fall durchführen, weil sich ein/e BesucherIn nicht an eine Regie halten muss und die Session auf jeder beliebigen Seite beginnen kann.

In den beiden Teilen der bedingten if-Verzweigung folgt der jeweilige Programm-Teil. Wenn das Element noch nicht existiert, dann weist man ihm (else...) einen sinnvollen Anfangswert zu.

Mit Funktion unset() kann man ein einzelnes Array-Element löschen. Verwenden sie jedoch keinesfalle unset($_SESSION) weil damit das gesamte Array $_SESSION entfernt wird.


Liste aller Session-Variablen

Mit einer for-Schleife kann man alle aktuell definierten Array-Elemente durchlaufen.
Dieser Programm-Teil ist in jeder Session-Demo-Seite enthalten: Damit werden alle aktuellen Session-Daten angezeigt.

User-Daten

Man kann jede interaktive Methode verwenden, um die BesucherInnen einer Seite zur Eingabe von Daten einzuladen.
Dazu werden meist HTML-Formulare (<form>-Elemente) verwendet.

• Ein Formular wird mit der submit()-Methode an sein Ziel abgesendet: In den Session-Demo-Seiten ist das Ziel (action-Attribut) jeweils die gleiche Datei.

Wenn man die User-Daten in Session-Elementen speichern will, dann sollte man dies vor Beginn aller anderen Arbeiten (mit Ausnahme von session_start() ) tun: Nur in diesem Fall stehen die User-Daten bereits auf der Formular-Empfangs-Seite zur Verfügung.

• Wenn die User-Daten einmal in Session-Elementen gespeichert sind, dann kann man sie ohne weitere Maßnahmen auf allen folgenden (PHP)-Seiten verwenden.

• Die hier vereinfacht gezeigte Methode wird in den Session-Demo-Seiten verwendet, um einen 'Namen' als Session-Element zu verwalten. Mit weiteren User-Optionen kann man ausgewählte Session-Elemente oder alle Elemente löschen - In diesem Fall wird jedoch auch das Element $_SESSION['allow'] gelöscht und das PHP-Programm reagiert darauf mit Weiterleitung (Redirect) zu einer Fehler-Seite.


Es ist allerdings möglich, die gleichen Daten zur Kontrolle mit Hilfe unterschiedlicher Methoden zu erfassen, oder die Daten zwischen den verwendeten Methoden auszutauschen.

Weiterleitung mit PHP

Das Programm prüft, ob das Session-Element $_SESSSION['allow'] existiert.

Wenn nicht, dann wird mit
header('Location:http://....fehlerseite.html')
die Weiterleitung zur Adresse einer Fehler-Seite angeordnet.
Die Adresse (URL) des Ziels muss absolut formuliert werden. Ihr Text wird hier in der Variablen $rurl zusammengestellt. Die meisten Browser akzeptieren auch relative Adressen, darauf sollte man sich jedoch nicht verlassen.


Alternativ kann man jede Webseite auch mit → Javascript-Funktionen weiterleiten.
Diese Maßnahme wird jedoch am Client ausgeführt, wo man sie (z.B. durch Abschalten aller Javascript-Funktionen) blockieren kann.

Javascript

Auch mit Javascript kann man - unabhängig von PHP - Cookies setzen und lesen.
Diese Methode wird hier lediglich erwähnt, jedoch nicht vorgestellt.