&reftitle.examples;
Ab PHP 4.1.0 steht $_SESSION genau wie
$_POST, $_GET,
$_REQUEST und so weiter, als globale Variable zur
Verfügung. Im Gegensatz zu $HTTP_SESSION_VARS ist
$_SESSION immer global. Deshalb brauchen Sie für
$_SESSION nicht das Schlüsselwort global zu
verwenden. Bitte beachten Sie, dass in dieser Dokumentation nun überall
$_SESSION verwendet wird. Sie können
$_SESSION durch $HTTP_SESSION_VARS
ersetzen, wenn Sie Letzteres bevorzugen. Beachten Sie auch, dass Sie Ihre
Session mit session_start starten müssen, bevor
$_SESSION zur Verfügung steht.
Für die Schlüssel des assoziativen $_SESSION-Arrays
gelten die selben Beschränkungen, wie für die Bezeichnungen von regulären
Variablen in PHP, d.h. sie dürfen nicht mit einer Zahl, sondern müssen mit
einem Buchstaben oder Unterstrich beginnen. Um weitere Deteils zu
erhalten, siehe Abschnitt Variablen.
Falls register_globals
deaktiviert ist, können nur Bestandteile des globalen assoziativen Arrays
$_SESSION als Session-Variablen registriert werden.
Wiederhergestellte Session-Variablen stehen nur im Array
$_SESSION zur Verfügung.
Aus Gründen der Verbesserung der Sicherheit und der Lesbarkeit des Codes
wird die Verwendung von $_SESSION (oder
$HTTP_SESSION_VARS bei PHP 4.0.6 oder niedriger)
empfohlen. Mit $_SESSION werden die Funktionen
session_register,
session_unregister und
session_is_registered nicht benötigt. Auf die
Session-Variablen kann wie auf jede normale Variable zugegriffen werden.
Registrierung einer Variablen mit $_SESSION.
]]>
Aufheben der Registrierung einer Variablen mit
$_SESSION und deaktiviertem register_globals.
]]>
Heben Sie NICHT die Registrierung der gesamten
$_SESSION mit unset($_SESSION) auf,
weil dies die Registrierung von Variablen durch die Superglobale
$_SESSION deaktivieren würde.
Sie können in Session-Variablen keine Referenzen verwenden, weil es keine
praktikable Möglichkeit gibt, eine Referenz in eine andere Variable
zurückzuführen.
Wenn register_globals aktiviert
ist, kann jede globalen Variable als Session-Variable registriert werden.
Beim Neustart einer Session werden diese Variablen als entsprechende
globale Variablen wiederhergestellt. Da PHP wissen muss, welche globalen
Variablen als Session-Variablen registriert sind, muss der Benutzer
Variablen mit der Funktion session_register
registrieren. Sie können das vermeiden, indem Sie einfach Einträge in
$_SESSION setzen.
Verwenden Sie nicht session_register,
session_is_registered und
session_unregister, wenn Sie
$_SESSION vor PHP 4.3.0 verwenden und register_globals deaktiviert ist.
Es ist sowohl aus Sicherheitsgründen als auch wegen der Performance
empfehlenswert, register_globals zu deaktivieren.
Wenn register_globals aktiviert
ist, dann referenzieren die globalen Variablen und die Einträge von
$_SESSION automatisch die selben Werte, die in der
vorherigen Instanz der Session registriert wurden. Falls die Variable
mittels $_SESSION registriert wird, steht die globale
Variable allerdings erst ab der nächsten Anfrage zur Verfügung.
Es gibt einen Fehler in PHP 4.2.3 und früheren Versionen. Wenn Sie eine
neue Session-Variable mittels session_register
registrieren, referenzieren der Eintrag im globalen Bereich und der
$_SESSION-Eintrag bis zum nächsten
session_start nicht den selben Wert. D.h. eine
Änderung an der neu registrierten globalen Variablen wird nicht vom
$_SESSION-Eintrag widergespiegelt. Dies wurde in PHP
4.3.0 korrigiert.
Übermittlung der Session-ID
Es gibt zwei Methoden, eine Session-ID zu übermitteln:
Cookies
URL-Parameter
Das Session-Modul unterstützt beide Methoden. Cookies sind optimal, aber da
sie nicht immer zur Verfügung stehen, bieten wir auch noch eine Alternative
an. Die zweite Methode hängt die Session-ID direkt an die URLs.
PHP ist in der Lage, Links transparent umzuwandeln. Falls Sie nicht PHP
4.2.0 oder höher verwenden, müssen Sie das beim Übersetzen von PHP manuell
aktivieren. Unter Unix müssen Sie dazu configure mit --enable-trans-sid aufrufen.
Wenn diese Option und die Laufzeit-Option
session.use_trans_sid aktiviert sind, werden relative
URIs automatisch so geändert, dass sie die Session-ID enthalten.
Die &php.ini;-Anweisung arg_separator.output ermöglicht
es, die Trennung von Argumenten anzupassen. Geben Sie dort für volle
XHTML-Konformität & an.
Alternativ können Sie die Konstante SID verwenden, die
definiert ist, nachdem die Session gestartet wurde. Falls der Client kein
geeignetes Session-Cookie gesendet hat, hat sie die Form
session_name=session_id. Andernfalls wird sie zu einer
leeren Zeichenkette erweitert. Aus diesem Grund können Sie sie
bedingungslos in URLs einbetten.
Das folgende Beispiel demonstriert, wie eine Variable registriert wird und
wie unter Verwendung einer SID korrekt auf eine andere Seite verwiesen
wird.
Zählen der Seitenaufrufe eines einzelnen Benutzers
Hallo Besucher, Sie haben diese Seite mal
aufgerufen.
]]>
Die Funktion htmlspecialchars kann dazu verwendet
werden, um bei der Ausgabe der SID XSS-ähnliche Angriffe zu verhindern.
Die oben gezeigte Ausgabe der SID ist nicht nötig, wenn PHP mit --enable-trans-sid übersetzt
wurde.
Bei nichtrelativen URLs wird davon ausgegangen, dass sie auf externe
Seiten zeigen und deshalb keine SID angehängt, weil es ein
Sicherheitsrisiko wäre, die SID an einen anderen Server zu übermitteln.
Individuelle Session-Routinen
Wenn Sie die Speicherung in einer Datenbank oder irgendeine andere Art der
Speicherung realisieren wollen, können Sie
session_set_save_handler verwenden, um eine Reihe von
benutzerdefinierten Speicherfunktionen zu erzeugen.