## Grundlegende Anwendung

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 Session-Daten abzurufen. Wenn es keine ID oder kein Session-Cookie gibt, wird PHP veranlasst, 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 Session-Daten. Am Ende des Skripts nimmt PHP automatisch den Inhalt der $_SESSION-Superglobalen, serialisiert ihn und verwendet die Session-Speicherroutine um ihn zu speichern.

Standardmäßig verwendet PHP die interne `files`-Speicherroutine, die mittels session.save_handler festgelegt ist. Diese speichert die Session-Daten 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']);
    ?>

Achtung

Die Variable $_SESSION selbst darf NICHT mit `unset($_SESSION)` gelöscht werden, da dies die Registrierung von Session-Variablen über die Superglobale $_SESSION deaktivieren würde.

Warnung

In Session-Variablen können keine Referenzen verwendet werden, weil es keine praktikable Möglichkeit gibt, eine Referenz in eine andere Variable zurückzuführen.

> Hinweis:

> Bei dateibasierten Sessions (der Standard in PHP) wird die Session-Datei gesperrt, wenn eine Session über session_start() oder implizit über session.auto_start geöffnet wurde. Einmal gesperrt, kann solange kein anderes Skript auf dieselbe Session-Datei 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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open