Sessions bieten eine einfache Möglichkeit, Daten für individuelle Benutzer unter einer eindeutigen Session-ID zu speichern. Sie können verwendet werden, damit Daten zwischen Seitenanforderungen bestehen bleiben. Session-IDs werden in der Regel über Session-Cookies an den Browser gesendet und die ID wird verwendet, um vorhandene Sessiondaten abzurufen. Das Fehlen einer ID oder eines Session-Cookies veranlasst PHP, eine neue Session zu erstellen und eine neue Session-ID zu erzeugen.
Sessions folgen einem einfachen Ablauf. Wenn eine Session gestartet wird, ruft PHP entweder eine vorhandene Session unter Verwendung einer (normalerweise von einem Session-Cookie) übergebenen ID ab oder erzeugt eine neue Session, falls keine Session-ID übergeben wurde. Nachdem die Session gestartet wurde, füllt PHP die $_SESSION-Superglobale mit allen Sessiondaten. Am Ende des Skripts nimmt PHP automatisch den Inhalt der $_SESSION-Superglobalen, serialisiert ihn und verwendet Session-Speicherfunktion um ihn zu speichern.
Standardmäßig verwendet PHP die interne
files
-Speicherroutine, die mittels session.save_handler festgelegt
ist. Diese speichert die Sessiondaten auf dem Server an der mit der
Konfigurationsanweisung session.save_path angegebenen
Stelle.
Sessions können über die Funktion session_start()
gestartet werden. Falls die Konfigurationsanweisung session.auto_start auf
1
gesetzt ist, wird eine Session automatisch zu
Beginn einer Anfrage gestartet.
Sessions werden normalerweise automatisch geschlossen, wenn PHP am Ende eines Skripts ist, können aber über session_write_close() auch manuell geschlossen werden.
Beispiel #1 Registrierung einer Variablen mit $_SESSION.
<?php
session_start();
if (!isset($_SESSION['zaehler'])) {
$_SESSION['zaehler'] = 0;
} else {
$_SESSION['zaehler']++;
}
?>
Beispiel #2 Aufheben der Registrierung einer Variablen mit $_SESSION.
<?php
session_start();
unset($_SESSION['zaehler']);
?>
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.
register_globals überschreibt im globalen Namensraum Variablen, deren Namen mit denen von Sessionvariablen übereinstimmen. Für Details siehe Verwendung von Register Globals.
Hinweis:
Bei dateibasierten Sessions (der Standard in PHP) wird die Sessiondatei gesperrt, wenn eine Session über session_start() oder implizit über session.auto_start geöffnet wurde. Einmal gesperrt, kann solange kein anderes Skript auf die selbe Sessiondatei zugreifen, bis die Session durch Beenden des ersten Skripts oder durch den Aufruf von session_write_close() geschlossen wurde.
Dies ist wahrscheinlich ein Problem auf Websites, die verstärkt AJAX verwenden und mehrere gleichzeitige Zugriffe haben. Der einfachste Weg, damit umzugehen ist, session_write_close() möglichst früh im Skript aufzurufen, sobald alle nötigen Änderungen an der Session vorgenommen wurden. Alternativ könnte ein Session-Backend verwendet werden, das gleichzeitige Zugriffe unterstützt.