de.comp.lang.php FAQ

29.4. Wie übergebe ich Session-IDs ohne Cookies an eine andere Seite? Was ist Fallback?

Antwort von Daniel T. Gorski

Viele Browser-User haben in ihrem Browser die Cookies aus diversen Gründen deaktiviert, oder lassen sich jeden Cookie bestätigen. Sollte ein Cookie auf dem lokalen Rechnersystem nicht gesetzt werden können, muss ein Ersatzmechanismus her - ein sog. Fallback. In diesem Fall ist der Fallback (Rückfall / Atavismus) eine Ersatzmethode, die die Übergabe der Session-ID an ein Folgescript ohne Cookies erlaubt.

Man kann den Fallback dadurch realisieren, dass man dem Folgescript die Session-ID quasi "manuell" bei jedem GET

<A href="test.session.php?<?php=SID?>">

oder POST - bei Formularen - mittels

<INPUT type  = "hidden"
       name  = "<?php=session_name()?>"
       value = "<?php=session_id()?>">

übergibt. ACHTUNG: Das bedeutet, dass jeder Link und jedes Formular innerhalb einer Website mit einem zusätzlichen Parameter versehen werden muss! Wird die Session-ID nicht korrekt übergeben, wird ein Folge-Script nicht auf die Sessiondaten zugreifen können - diese Daten sind für dieses Script "verloren".

PHP4 kann man auch mit dem --enable-trans-sid-Parameter kompilieren. Dann hat dies zufolge, dass, wenn der Client (Browser) keine Cookies annehmen kann/will, alle relativen Links einer Webpage mit dem zusätzlichen SessionName=Session-ID Parameter ergänzt werden. Dies klingt zunächst gut, aber man sollte beachten, dass durch den zusätzlichen Aufwand, den der PHP-Parser leisten muss, sich diese Technik nicht für High-Traffic-Websites oder Server mit vielen Vhosts eignet. Auch wenn man Projekte realisiert, die auf anderen Webservern laufen sollen, kann man nicht davon ausgehen, dass das betreffende PHP mit --enable-trans-sid kompiliert worden ist.

Die --enable-trans-sid-Technik versagt (PHP 4.0.1.pl2) auch bei folgenden Konstrukten:

<FORM action="<?php=$_SERVER['PHP_SELF']?>">

weil offensichtlich zuerst an den action-Tag die Session-ID-Information angehängt wird, und dann erst der Wert von $_SERVER['PHP_SELF']. Das Ergebnis sieht dann fälschlicherweise so aus:

<FORM action="?PHPSESSID=cd45a3f76f7325099c755b25b/test.session.php">

Fallback-Klasse

Wie bereits erwähnt, muss man u.U. selbst dafür Sorge tragen, dass der Fallback-Mechnismus greift, wenn der Client keine Cookies annimmt. Eine PHP-Klasse die das leisten kann ist auf http://develnet.org/ verfügbar.

Sie fügt bei Bedarf die Session-ID an Hyperlinks, Formulare und Redirects und ermöglicht die punktgenaue Steuerung des Fallbacks. Mit dieser Klasse muss man sich ebenfalls keine Gedanken beim Hosterwechsel machen, da man nicht auf die u.U. nicht vorhandene --enable-trans-sid-Funktionalität angewiesen ist.

Diese Klasse erlaubt zusätzlich das bequeme Registrieren von Session-Variablen, auch wenn PHP mit register_globals=off konfiguriert ist.

hosted by
schlund + partner

Valid HTML 4.01! Valid CSS!

29.4. Wie übergebe ich Session-IDs ohne Cookies an eine andere Seite? Was ist Fallback?
http://www.dclp-faq.de/q/q-sessions-fallback.html
de.comp.lang.php FAQ | (c) Copyright 2000-2003 Das dclp-FAQ-Team