PHP Handbuch
Zurück |  | Nach vorne

# XCVII. Session Funktionen

# Einführung

Die Unterstützung von Sessions in PHP bietet die Möglichkeit, bestimmte Daten während einer Folge von Aufrufen Ihrer Website festzuhalten. Damit können Sie persönlichere Applikationen erstellen und Ihre Website ansprechender gestalten.

Einem Besucher wird beim Aufruf Ihrer Website eine eindeutige ID, die sogenannte Session-ID, zugeordnet. Diese wird entweder benutzerseitig in einem Cookie abgelegt oder in der URL übermittelt.

Die Unterstützung von Sessions erlaubt Ihnen, eine beliebige Anzahl von Variablen zu registrieren und diese über Anfragen hinweg zu erhalten. Wenn ein Besucher Ihre Website aufruft, überprüft PHP automatisch (falls session.auto_start auf 1 gesetzt ist) oder auf Anfrage (explizit durch session_start() oder implizit durch session_register()), ob mit der Anfrage schon eine bestimmte Session-ID gesendet wurde. Wenn dies der Fall ist, wird die zuvor gespeicherte Umgebung wiederhergestellt.

Achtung
Falls Sie session.auto_start aktivieren, können Sie keine Objekte in Ihre Session aufnehmen, weil die Definition der Klasse vor dem Start der Session geladen werden muss, damit die Objekte in Ihrer Session wiederhergestellt werden.

Alle registrierten Variablen werden serialisiert, nachdem die Anfrage beendet ist. Registrierte Variablen, die nicht definiert sind, werden als nicht definiert gekennzeichnet. Auch bei darauffolgenden Zugriffen werden sie nicht vom Session-Modul definiert, außer der Benutzer definiert sie später.

> Anmerkung: Die Behandlung von Sessions wurde in PHP 4.0 eingeführt.

> Anmerkung: Bitte beachten Sie beim Arbeiten mit Sessions, dass der Datensatz einer Session nicht angelegt wird, bevor eine Variable mit der Funktion session_register() registriert oder dem superglobalen Array `$_SESSION` ein neuer Schlüssel hinzugefügt wird. Das gilt auch dann, wenn eine Session mit der Funktion session_start() gestartet wurde.

# Sessions und Sicherheit

Externe Links: Session fixation

Das Session-Modul bietet keine Garantie dafür, dass Informationen, die Sie in einer Session speichern, nur vom Benutzer gesehen werden können, der die Session erzeugt hat. Sie müssen zusätzliche Maßnahmen ergreifen, um die Integrität der Session ihrer Wichtigkeit entsprechend angemessen aktiv zu schützen.

Schätzen Sie die Wichtigkeit der Daten ab, die in Ihren Sessions transportiert werden und treffen Sie zusätzliche Schutzmaßnahmen -- in der Regel bezahlen Sie dafür mit einer geringeren Benutzerfreundlichkeit. Wenn Sie z.B. Benutzer vor einfachen Social Engineering Tactics (Anm. des Übersetzers: Techniken der Ausnutzung menschlicher Schwächen) schützen wollen, müssen Sie `session.use_only_cookies` aktivieren. Cookies müssen dann benutzerseitig auf jeden Fall aktiviert sein, weil Sessions sonst nicht funktionieren.

Es gibt mehrere Wege, über die eine Sessio-ID an Dritte gelangen kann. Eine entführte Session-ID ermöglicht diesen, auf alle Daten zuzugreifen, die mit dieser Session-ID verbunden sind. Erstens sind das URLs, die Session-IDs enthalten. Wenn Sie auf eine externe Site verweisen, könnte die URL inklusive Session-ID in den Referrer-Logs der externen Site gespeichert werden. Zweitens kann ein aktiverer Angreifer Ihren Netzwerkverkehr abhören. Falls Ihr Netzwerkverkehr nicht verschlüsselt ist, werden Session-IDs im Klartext über das Netzwerk übertragen. Hier ist die Lösung, auf Ihrem Server SSL zu implementieren und die Verwendung für Ihre Benutzer obligatorisch zu machen.

# Anforderungen

Diese Erweiterung benötigt zur Erstellung keine externen Bibliotheken.

> Anmerkung: Optional können Sie für die Speicherung von Sessions die von Ralf S. Engelschall entwickelte Shared Memory Allocation (mm) verwenden. Sie müssen dazu mm herunterladen und installieren. Für Windows-Plattformen steht diese Option nicht zur Verfügung. Beachten Sie, dass das Sessionspeicherungs-Modul für mm nicht dafür garantiert, dass gleichzeitige Zugriffe auf die selbe Session richtig gesperrt sind. Die Verwendung eines auf Shared Memory basierenden Dateisystems (wie z.B. tmpfs unter Solaris/Linux oder /dev/md unter BSD) könnte für die Speicherung von Sessions in Dateien geeigneter sein, weil sie entsprechend gesperrt sind.

# Installation

Die Unterstützung von Sessions ist in PHP standardmäßig aktiviert. Falls Sie Ihr PHP ohne Unterstützung von Sessions bauen wollen, müssen Sie bei der Konfiguration die Option `--disable-session` angeben. Um für die Speicherung von Sessions die shared memory allocation (mm) zu benutzen, müssen Sie PHP mit der Option `--with-mm[=DIR]` konfigurieren.

The windows version of `PHP` has built in support for this extension. You do not need to load any additional extension in order to use these functions.

> Anmerkung: Standardmäßig werden alle Daten, die zu einer bestimmten Session gehören, in einer Datei gespeichert, die in dem Verzeichnis liegt, das durch die INI Option session.save_path bestimmt ist. Für jede Session wird (unabhängig davon, ob sie überhaupt Daten enthält) eine Datai erzeugt. Das liegt daran, dass eine Session geöffnet wird (eine Datei wird erzeugt), ohne dass jemals Daten in diese Datei geschrieben werden. Beachten Sie, dass es sich bei diesem Verhalten um einen Nebeneffekt der Beschränkungen beim Arbeiten mit dem Dateisystem handelt und dass es mit einer benutzerdefinierten Session-Speicherfunktion (wie z.B. mit einer, die eine Datenbank verwendet) möglich ist, Sessions nicht zu verfolgen, wenn sie keine Daten enthalten.

# Laufzeit Konfiguration

Das Verhalten dieser Funktionen wird von Einstellungen in der `php.ini` bestimmt.

Tabelle 1. Session-Konfigurationsoptionen

Bezeichnung | Grundeinstellung | Änderbar
--- | --- | ---
session.save_path | "/tmp" | PHP_INI_ALL
session.name | "PHPSESSID" | PHP_INI_ALL
session.save_handler | "files" | PHP_INI_ALL
session.auto_start | "0" | PHP_INI_ALL
session.gc_probability | "1" | PHP_INI_ALL
session.gc_divisor | "100" | PHP_INI_ALL
session.gc_maxlifetime | "1440" | PHP_INI_ALL
session.serialize_handler | "php" | PHP_INI_ALL
session.cookie_lifetime | "0" | PHP_INI_ALL
session.cookie_path | "/" | PHP_INI_ALL
session.cookie_domain | "" | PHP_INI_ALL
session.cookie_secure | "" | PHP_INI_ALL
session.use_cookies | "1" | PHP_INI_ALL
session.use_only_cookies | "0" | PHP_INI_ALL
session.referer_check | "" | PHP_INI_ALL
session.entropy_file | "" | PHP_INI_ALL
session.entropy_length | "0" | PHP_INI_ALL
session.cache_limiter | "nocache" | PHP_INI_ALL
session.cache_expire | "180" | PHP_INI_ALL
session.use_trans_sid | "0" | PHP_INI_SYSTEM | PHP_INI_PERDIR
session.bug_compat_42 | "1" | PHP_INI_ALL
session.bug_compat_warn | "1" | PHP_INI_ALL
session.hash_function | "0" | PHP_INI_ALL
session.hash_bits_per_character | "4" | PHP_INI_ALL
url_rewriter.tags | "a=href,area=href,frame=src,input=src,form=fakeentry" | PHP_INI_ALL

Um weitere Details und die Definition der PHP_INI_*-Konstanten zu erhalten, siehe ini_set().

Das Sessionmanagementsystem unterstützt eine Anzahl von Konfigurationsoptionen, die Sie in Ihrer `php.ini` setzen können. Wir geben Ihnen dazu einen kleinen Überblick.

`session.save_handler` string

  `session.save_handler` definiert den Namen der Prozedur, die benutzt wird, um die Daten zu speichern und zurückzuholen, die mit der Session in Verbindung stehen. Grundeinstellung `files`. Siehe auch session_set_save_handler().

`session.save_path` string

  `session.save_path` definiert das Argument, das an die Speicherprozedur übergeben wird. Wenn Sie die standardmäßige files Prozedur wählen, ist das der Pfad, unter dem die Dateien erzeugt werden. Grundeinstellung `/tmp`. Siehe auch session_save_path().

  Für diese Anweisung gibt es ein optionales Argument N, das die Anzahl der Verzeichnisebenen bestimmt, über die Ihre Session-Dateien verteilt werden. Wird sie zum Beispiel auf `'5;/tmp'` gesetzt, kann das das Anlegen einer Session-Datei und Speicherstelle wie `/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If` bewirken. Um N verwenden zu können, müssen Sie alle diese Verzeichnisse vorher anlegen. In `ext/session` gibt es für diesen Zweck ein kleines Shell-Script namens `mod_files.sh`. Beachten Sie, dass die automatische 'Müllentsorgung' (garbage collection) nicht durchgeführt wird, wenn N verwendet wird und größer 0 ist (für weitere Informationen siehe eine Kopie der `php.ini`). Achten Sie bei der Verwendung von N außerdem darauf, dass Sie `session.save_path` zwischen Anführungsstriche setzen, weil der Trenner (`;`) in der `php.ini` auch für Kommentare benutzt wird.

  Warnung
  Wenn Sie ein Verzeichnis gewählt haben, für das jeder Leserechte hat, wie das z.B. bei /tmp (Grundeinstellung) der Fall ist, könnten andere Serverbenutzer mit Hilfe der Dateiliste dieses Verzeichnisses Ihre Sessions entführen.

  > Anmerkung: Benutzer von Windows müssen diese Variable ändern, um die Session-Funktionen von PHP nutzen zu können. Stellen Sie sicher, dass Sie einen gültigen Pfad, z.B. `c:/temp`, angegeben haben.

`session.name` string

  `session.name` spezifiziert den Namen der Session, der als Cookie-Name verwendet wird. Grundeinstellung `PHPSESSID`. Siehe auch session_name().

`session.auto_start` boolean

  `session.auto_start` spezifiziert, ob das Session-Modul zu Beginn einer Anfrage automatisch eine Session startet. Grundeinstellung `0` (deaktiviert).

`session.serialize_handler` string

  `session.serialize_handler` definiert den Namen der Prozedur, die benutzt wird, um Daten zu serialisieren/deserialisieren. Gegenwärtig wird ein internes PHP-Format (Name `php`) und WDDX (name `wddx`) unterstützt. WDDX steht nur zur Verfügung, wenn PHP mit WDDX support kompiliert wurde. Grundeinstellung `php`.

`session.gc_probability` integer

  `session.gc_probability` wird in Verbindung mit `session.gc_divisor` dazu verwendet, die Wahrscheinlichkeit zu regeln, mit der die gc (garbage collection) Routine gestartet wird. Grundeinstellung `1`. Siehe auch session.gc_divisor.

`session.gc_divisor` integer

  `session.gc_divisor` definiert gekoppelt mit `session.gc_probability` die Wahrscheinlichkeit, mit der die gc (garbage collection) Routine bei jeder Initialisierung einer Session gestartet wird. Die Wahrscheinlichkeit errechnet sich aus gc_probability/gc_divisor. 1/100 bedeutet z.B., dass die GC-Routine bei jeder Anfrage mit einer Wahrscheinlichkeit von 1% gestartet wird. Grundeinstellung `100`.

`session.gc_maxlifetime` integer

  `session.gc_maxlifetime` spezifiziert die Anzahl der Sekunden, nach denen Daten als 'garbage' ('Müll') betrachtet und entsorgt werden.

  > Anmerkung: Falls Sie die standardmäßige dateibasierte Session-Prozedur verwenden, muss Ihr Dateisystem die Zugriffszeiten (atime) verfolgen. Windows FAT tut dies nicht. Sie müssen sich daher einen anderen Weg einfallen lassen, um die 'Müllentsorgung' Ihrer Session zu erledigen, wenn Sie an ein FAT-Dateisystem gebunden sind oder an irgendein anderes Dateisystem, das keine atime-Kontrolle bietet. Seit PHP 4.2.3 wird mtime (modified date) anstatt atime verwendet. Sie werden also keine Problem mit Dateisystemen haben, bei denen atime nicht zur Verfügung steht.

`session.referer_check` string

  `session.referer_check` enthält die Zeichenkette, auf die Sie jeden HTTP-Referer überprüfen wollen. Wenn der Referer vom Client gesendet und die Zeichenkette nicht gefunden wurde, wird die eingebettete Session-ID als ungültig gekennzeichnet. Grundeinstellung ist eine leere Zeichenkette.

`session.entropy_file` string

  `session.entropy_file` gibt den Pfad zu einer externen Quelle (Datei) an, die bei der Erzeugung einer Session-ID als zusätzliche Entropiequelle verwendet wird. Beispiele sind `/dev/random` oder `/dev/urandom`, die auf vielen Unix-Systemen zur Verfügung stehen.

`session.entropy_length` integer

  `session.entropy_length` spezifiziert die Anzahl der Bytes, die von der oben spezifizierten Datei gelesen werden. Grundeinstellung `0` (deaktiviert).

`session.use_cookies` boolean

  `session.use_cookies` spezifiziert, ob das Modul Cookies verwendet, um die Session-ID clientseitig zu speichern. Grundeinstellung `1` (aktiviert).

`session.use_only_cookies` boolean

  `session.use_only_cookies` spezifiziert, ob das Modul nur Cookies verwendet, um die Session-ID clientseitig zu speichern. Grundeinstellung `0` (deaktiviert, für Rückwärts-Kompatibilität). Mit Aktivierung dieser Einstellung wird möglichen Angriffen durch Übermittlung von Session-IDs in URLs vorgebeugt. Diese Einstellung wurde in `PHP` 4.3.0 hinzugefügt.

`session.cookie_lifetime` integer

  `session.cookie_lifetime` spezifiziert die Cookie-Lebensdauer, die an den Browser geschickt wird, in Sekunden. Der Wert 0 bedeutet "bis der Browser geschlossen wird." Grundeinstellung `0`. Siehe auch session_get_cookie_params() und session_set_cookie_params().

`session.cookie_path` string

  `session.cookie_path` spezifiziert den Pfad, in dem das Session-Cookie gesetzt wird. Grundeinstellung `/`. Siehe auch session_get_cookie_params() und session_set_cookie_params().

`session.cookie_domain` string

  `session.cookie_domain` spezifiziert die Domain, unter der das Session-Cookie gesetzt wird. In der Grundeinstellung überhaupt keine. Siehe auch session_get_cookie_params() und session_set_cookie_params().

`session.cookie_secure` boolean

  `session.cookie_secure` spezifiziert, ob Cookies nur über sichere Verbindungen geschickt werden sollen. Grundeinstellung `off`. Diese Einstellung wurde in `PHP` 4.0.4 hinzugefügt. Siehe auch session_get_cookie_params() und session_set_cookie_params().

`session.cache_limiter` string

  `session.cache_limiter` spezifiziert die Methode der Cacheverwaltung, die bei Session-Seiten benutzt wird (none/nocache/private/private_no_expire/public). Grundeinstellung `nocache`. Siehe auch session_cache_limiter().

`session.cache_expire` integer

  `session.cache_expire` spezifiziert in Minuten, wie lange Session-Seiten im Cache bleiben. Bei nocache ist diese Angabe wirkungslos. Grundeinstellung `180`. Siehe auch session_cache_expire().

`session.use_trans_sid` boolean

  `session.use_trans_sid` bestimmt ob transparente SID-Unterstützung aktiviert ist oder nicht. Grundeinstellung `0` (deaktiviert).

  > Anmerkung: In PHP 4.1.2 oder darunter wird sie durch compilieren mit `--enable-trans-sid` aktiviert. Ab PHP 4.2.0 ist das Feature trans-sid immer eincompiliert.

  > URL-basiertes Session-Management hat im Vergleich zu Cookie-basiertem Session-Management zusätzliche Sicherheitsrisiken. Benutzer können zum Beispiel eine URL, die eine aktive Session-ID enthält, per Email an Freunde schicken oder in ihren Bookmarks speichern und immer mit der selben Session-ID auf Ihre Seite zugreifen.

`session.bug_compat_42` boolean

  Die PHP-Versionen bis 4.2.0 haben eine undokumentierte Funktion/einen undokumentierten Fehler, der es Ihnen gestattet, eine Session-Variable im globalen Bereich zu initialisieren, obwohl register_globals deaktiviert ist. Ab Version 4.3.0 gibt PHP bei Verwendung dieser Funktion eine Warnung aus, wenn zusätzlich session.bug_compat_warn aktiviert ist.

`session.bug_compat_warn` boolean

  Die PHP-Versionen bis 4.2.0 haben eine undokumentierte Funktion/einen undokumentierten Fehler, der es Ihnen gestattet, eine Session-Variable im globalen Bereich zu initialisieren, obwohl register_globals deaktiviert ist. Ab Version 4.3.0 gibt PHP bei Verwendung dieser Funktion eine Warnung aus, wenn sowohl session.bug_compat_42 als auch session.bug_compat_warn aktiviert sind.

`session.hash_function` integer

  `session.hash_function` gibt Ihnen die Möglichkeit, den Prüfsummen-Algorithmus für die Erzeugung von Session-IDs selbst zu bestimmen. '0' bedeutet MD5 (128 Bit) und '1' bedeutet SHA-1 (160 Bit).

  > Anmerkung: Dies wurde in PHP 5 eingeführt.

`session.hash_bits_per_character` integer

  `session.hash_bits_per_character` gibt Ihnen die Möglichkeit, zu definieren wieviele Bit bei der Umwandlung der binären Prüfsummen-Daten in etwas Lesbares in jedem Zeichen gespeichert werden. Mögliche Werte sind '4' (0-9, a-f), '5' (0-9, a-v) und '6' (0-9, a-z, A-Z, "-", ",").

  > Anmerkung: Dies wurde in PHP 5 eingeführt.

`url_rewriter.tags` string

  `url_rewriter.tags` bestimmt, wenn Unterstützung für transparente SID aktiviert ist, welche HTML-Tags so umgeschrieben werden, dass sie die Session-ID beinhalten. Grundeinstellung `a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=`

  > Anmerkung: Wenn Sie XHTML-konform sein wollen, müssen Sie den `form`-Eintrag entfernen und Ihre Formularfelder zwischen lt;fieldset>-Tags setzen.

Die Konfigurationseinstellungen von `track_vars` und `register_globals` beeinflussen, wie die Session-Variablen gespeichert und wiederhergestellt werden.

> Anmerkung: Seit PHP 4.0.3 ist `track_vars` immer aktiviert.

# Resource Typen

Diese Erweiterung definiert keine Resource-Typen.

# Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

`SID` (string)

  Konstante, die entweder den Namen und die ID der Session in der Form `"name=ID"` enthält oder eine leere Zeichenkette, falls die Session-ID in einem entsprechenden Cookie gesetzt wurde.

# Beispiele

> Anmerkung: Seit 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 die Verwendung von `$_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.

Beispiel 1. Registrierung einer Variablen mit `$_SESSION`.
`<?php session_start(); // Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS if (!isset($_SESSION['zaehler'])) { $_SESSION['zaehler'] = 0; } else { $_SESSION['zaehler']++; } ?>`

Beispiel 2. Aufheben der Registrierung einer Variablen mit `$_SESSION` und deaktiviertem register_globals.
`<?php session_start(); // Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS unset($_SESSION['zaehler']); ?>`

Achtung
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.

Beispiel 3. Aufheben der Registrierung einer Variablen mit aktiviertem register_globals, nachdem sie unter Verwendung von `$_SESSION` registriert wurde.
`<?php session_start(); // Ab PHP 4.3, können Sie auch einfach das vorige Beispiel benutzen. session_unregister('zaehler'); ?>`

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.

Achtung
Wenn Sie `$_SESSION` verwenden und register_globals deaktivieren, sollten Sie session_register(), session_is_registered() und session_unregister() nicht verwenden, wenn Ihre Scripte mit PHP 4.2 und niedriger funktionieren sollen. Sie können diese Funktionen ab 4.3 verwenden. Wenn Sie register_globals aktivieren, sollten Sie session_unregister() verwenden, weil beim Deserialisieren von Session-Daten die Session-Variablen als globale Variablen registriert werden. Die Deaktivierung von register_globals ist sowohl aus Sicherheitsgründen als auch wegen der Performance empfehlenswert.

Beispiel 4. Registrierung einer Variablen bei aktiviertem register_globals
`<?php if (! isset($_SESSION['zaehler'])) { $_SESSION['zaehler'] = 1; } else { $_SESSION['zaehler']++; } ?>`

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.

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 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 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.

> Anmerkung: Die `php.ini`-Anweisung arg_separator.output ermöglicht es, die Trennung von Argumenten anzupassen. Geben Sie dort für volle XHTML-Konformität &amp; an.

Alternativ können Sie die Konstante `SID` verwenden, die immer definiert ist. 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.

Beispiel 5. Zählen der Seitenaufrufe eines einzelnen Benutzers
`<?php if (!session_is_registered('zaehler')) { session_register('zaehler'); $zaehler = 1; } else { $zaehler++; } ?> <p> Hallo Besucher, Sie haben diese Seite <?php echo $zaehler; ?> Mal aufgerufen. </p> <p> Hier gehts <A HREF="nextpage.php?<?php echo strip_tags(SID)?>">weiter</A> </p>`

Die Funktion strip_tags() wird verwendet, 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.

> Anmerkung: 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.

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.

Zurück | Zum Anfang | Nach vorne
sesam_settransaction | Nach oben | session_cache_expire