PHP 4.3

9.10.3 Sessions ohne Cookies

Wir haben gesehen, dass die Session-ID in einem Cookie auf dem Rechner des Benutzers gespeichert wird. Die Verwendung von Cookies funktioniert jedoch nur, wenn der vom Benutzer verwendete Browser dies zulässt, was nicht immer der Fall sein muss. Es gibt daher noch ein anderes Verfahren, das die Verwaltung eines Session-Kontextes ohne die Verwendung von Cookies ermöglicht.
Der PHP-Interpreter stellt die Session-ID in der Startseite einer Session in der Konstanten SID zur Verfügung. Genauer gesagt steht in SID der String "PHPSESSID=……", wobei die Punkte durch die aktuelle ID ersetzt werden. Bei weiteren innerhalb derselben Session aufgerufenen Seiten erwartet der Interpreter die Session-ID in einem Cookie oder in einem URL-Parameter mit dem Namen PHPSESSID. Bei Formularen, die mit der post-Methode übertragen werden kann die Session-ID stattdessen auch in einem (versteckten) Formularfeld dieses Namens übergeben werden.

Um Ihre Seiten nun unabhängig von Cookies zu machen, müssen Sie nur dafür Sorge tragen, dass die ID auch ohne einen Cookie von einer Seite zur nächsten übertragen wird. Den einfachsten Weg stellen dabei die URL-Parameter dar, die Sie bereits kennen. Sie müssen also jeden Link, den Sie zu einer anderen Seite innerhalb Ihrer Website vorsehen, um die Übergabe der Session-ID ergänzen.

Wird im weiteren Verlauf einer Session die Session-ID mit einem Cookie an eine Seite übergeben, so enthält die Konstante SID in dieser Seite nur den leeren String. Wenn die Session-ID dagegen in einem URL-Parameter oder einem Formularfeld übergeben wurde, wird die Session-ID vom PHP-Interpreter wieder wie in der ersten Seite in der Konstanten SID abgelegt.

Sie können nun also alle Verweise auf eigene Seiten mittels PHP so ergänzen, dass die Session-ID als URL-Parameter übergeben wird:

 <a href="irgendeineSeite.php?<? echo SID; ?>">Linktext</a> 

Sowohl in der ersten Seite einer Session als auch in Folgeseiten, denen die Session-ID nicht mit einem Cookie übergeben wurde, wird damit ein URL-Parameter der Form PHPSESSID=Session-ID in den Verweis eingefügt. Konnte die Session-ID aber mit einem Cookie an diese Seite weitergegeben werden, so enthält SID nur den leeren String und der Verweis wird nicht um einen URL-Parameter ergänzt.

Diese Methode können Sie also auch anwenden, wenn vorher nicht bekannt ist, ob die Cookie-Funktion im Browser des Benutzers aktiviert ist. Es ist dabei auch egal, mit welcher Seite eine Session beginnt, denn in der ersten zu einer Session gehörigen Seite enthält die Konstante SID wie bereits erwähnt immer die Session-ID. Die Entscheidung, ob die Weitergabe der Session-ID im weiteren Verlauf über einen Cookie oder nur über URL-Parameter erfolgt, wird also dem Benutzer bzw. dessen Browser überlassen. Zunächst sind beide Wege möglich.

Wechselt der Benutzer mit Hilfe eines Formulars von einer Seite zur nächsten, sollten Sie die Session-ID in Form eines versteckten Formularfeldes weitergeben. Als Wert dieses Formularfeldes muss dabei die eigentliche Session-ID ohne den Namen eingefügt werden. Das ist der Teil von SID, der hinter dem Gleichheitszeichen beginnt:

  <input type="hidden" name="PHPSESSID"
     value="<? echo substr(SID, strpos(SID, '=') + 1); ?>"> 

Falls Sie genau wissen, dass die Seite mit dem Formular nicht die erste Seite der Session ist und ihr die Session-ID nur mit der get-Methode (also als URL-Parameter) und nicht mit der post-Methode übergeben worden sein kann, so können Sie stattdessen auch folgende etwas einfachere Form verwenden:

  <input type="hidden" name="PHPSESSID"
     value="<? echo $HTTP_GET_VARS["PHPSESSID"]; ?>"> 

Als Alternative zu dem gezeigten Vorgehen unterstützt PHP ein Verfahren, das Ihnen diese Arbeit abnehmen kann: Wenn in der Datei php.ini die Option session.use_trans_sid eingeschaltet ist, erfolgt die Weitergabe der Session-ID "transparent", also ohne dass Sie dies in ihrem Dokument explizit vorsehen müssen. Dabei werden Verweise mit relativen Pfadangaben vom PHP-Interpreter automatisch um den entsprechenden URL-Parameter ergänzt, falls die Session-ID nicht mit einem Cookie weitergegeben werden kann. Ebenso werden Formulare automatisch um ein verstecktes Textfeld mit der Session-ID ergänzt.

 

Kommentare (0)

Ihr Kommentar

Name