Es gibt zwei Methoden, eine Session-ID zu übermitteln:
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.
Hinweis:
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.
Beispiel #1 Zählen der Seitenaufrufe eines einzelnen Benutzers
<?php
session_start();
if (empty($_SESSION['zaehler'])) {
$_SESSION['zaehler'] = 1;
} else {
$_SESSION['zaehler']++;
}
?>
<p>
Hallo Besucher, Sie haben diese Seite <?php echo $_SESSION['zaehler']; ?> mal
aufgerufen.
</p>
<p>
Hier gehts
<a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">weiter</a>.
</p>
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.
Hinweis:
Bei nichtrelativen URLs wird davon ausgegangen, dass sie auf externe Seiten zeigen und deshalb keine
SID
angehängt, weil es ein Sicherheitsrisiko wäre, dieSID
an einen anderen Server zu übermitteln.