Sessionhandling
Mit einem HTML Formular, einem PHP Skript und einer Nutzerdatenbank lässt sich schnell eine Loginprozedur schreiben. Das Problem dabei ist, das der Login bei der nächsten Serveranfrage des Clients wieder "vergessen" ist. Der Server kann, da HTTP ein zustandsloses Protokoll ist, nicht erkennen ob eine Anfrage vom selben Client oder von einem neuen Nutzer erfolgt.
Lösungswege:
Eine Session hat stets eine ID, anhand der sie unterschieden werden kann und verschiedene Inhalte (Variable), die mit ihr gespeichert werden. Die Speicherung der Inhalte kann alternativ an zwei Stellen erfolgen, je nach der Einstellung der Servers bzw. des Clients:
Die Sessionverwaltung ist ein eigenes Modul in PHP und kann mit Hilfe der php.ini konfiguriert werden. Folgende Felder stehen zur Verfügung:
Parameter | Beschreibung |
---|---|
session.save_handler=files | Für die Speicherung der Sessions werden files verwendet (default Einstellung). Alternativ: mm zur Verwendung des Arbeitsspeichers. |
session.save_path=/tmp | Pfad für das Speichern der Sessions |
session.use_cookies=1 | Standardmässig werden Cookies verwendet. Nur wenn der Client die Cookies abgestellt hat wird auf dem Server gespeichert. |
session.name=PHPSESSID | Name der Sessionvariablen bzw. des Cookies |
session.auto_start=0 | Startet das Session Modul bei jedem Request automatisch |
session.cookie_lifetime=0 | Lebesdauer der Cookies (0 bedeutet bis zum nächsten Browserstart) |
session.gc_maxlifetime=1440 | Zeit nach der alle Sessiondaten zerstört werden. |
session.use_trans_sid=0 | Transparente Session Unterstützung |
Session anlegen
Beim Start einer Session wird geprüft ob sie vorhanden ist oder nicht. Wenn nicht, wird sie angelegt. Dies geschieht mit
session_start();
Dieser Befehl muss vor dem <html> Tag stehen!
Die Session kann ausgelesen werden mit
session_name();
session_id();
gelöscht wird sie mit
session_destroy();
Hinzufügen von Variablen
Zum Anlegen von Vatiablen in der Session wird der Name der Variable (nicht die Variable selbst!) übergeben.
$_SESSION['variablenname'] = "text";
löschen der Variablen
session_unregister('variablenname');
um zu testen ob die Variable bereits existiert
session_is_registered('variablenname');
Serialisieren
serialisieren von Daten (z.B. Arrays)
session_encode();
und deserialisieren
session_decode();
Zuerst versucht das Modul die Session ID im Cookie abzulegen, wenn der Client dies zulässt und der Server entsprechend konfiguriert ist.
Die Session ID wird an jeden im HTML-Dokument befindlichen Link angehängt und in jedes Formular als hidden-Field eingefügt. Der Programmierer braucht sich darum nicht kümmern.
Bei Weiterleitungen mit der header()-Funktion, wie auch in JavaScript Funktionen, muss man sich um das Anhängen der Session-ID selbst kümmern.
session_start();
$name = session_name();
$id = Session_id();
header("Location: datei.php?$name=$id");