- Einfache Registrierung von Variablen
- Registrierung mit Formular
Abhängig von der register_globals-Einstellung in der php.ini, werden die in den Sessiondaten registrierten Variablen bei einem session_start() wieder restauriert – d.h. diese Variablen und ihre Werte werden im globalen Variabenscope wiederhergestellt.
Zusätzlich stellt PHP 4 assoziative Arrays (Hashes) mit externen Daten zur Verfügung. Mit “externen Daten” sind Daten von außerhalb des Scriptes gemeint: also z.B. Server-Variablen, GET-, POST- und COOKIE (GPC) Daten. Diese Daten lassen sich über die entsprechenden Hashes abrufen. Hier eine Auswahl der PHP-Hashes:
- $HTTP_SERVER_VARS
- $HTTP_GET_VARS
- $HTTP_POST_VARS
- $HTTP_COOKIE_VARS
- und $HTTP_SESSION_VARS
Ab der PHP Version 4.1.0 wurden diese Hashes durch die superglobalen Hashes ersetzt. Möchte man die Beispiele aus diesem Tutorial benutzen, so sind je nach PHP Version die entprechenden Hashes im Quelltext zu ersetzen:
- $_SERVER
- $_GET
- $_POST
- $_COOKIE
- und $_SESSION
Der letzte Hash ($HTTP_SESSION_VARS resp. $_SESSION) ist für unseres Tutorial von besonderer Bedeutung: in diesem Hash werden – nach dem Start einer Session – die registrierten Session-Variablen ebenfalls zur Verfügung gestellt. Also sind die Session-Daten zweifach vorhanden: als einzelne Variablen und zusammenhängend als ein Hash. Doch Vorsicht: in neueren PHP 4-Versionen werden die $HTTP_SESSION_VARS als Referenzen behandelt, d.h. eine Änderung des Inhalts einer Variable in diesem Hash zieht auch eine Änderung der Variable mit gleichem Namen im globalen Variablen-Scope nach sich. Dieses Verhalten ändert sich je nach Blut-THC-Konzentration der PHP Programmierer.
Der Zugriff auf alle externen Daten sollte nicht direkt über die automatisch restaurierten Variablennamen erfolgen, sondern über Hashes, da anderenfalls durch Mißkonfigurationen der php.ini Sicherheitslücken entstehen könn(t)en. Diesem Leitsatz folgen wir auch hier und arbeiten mit dem $HTTP_SESSION_VARS-Hash.
Als nächstes wollen wir uns mal ein paar kleine Beispiele anschauen. Damit diese Beispiele wunschgemäß laufen, muss dein Browser temporäre Session-Cookies akzeptieren. Also, sollte die Session-Cookie-Annahme bei deinem Browser ausgeschaltet sein, so ist jetzt der richtige Zeitpunkt sie wieder einzuschalten.
Im separaten Fallback-Tutorial wird beschrieben wie man Session-IDs auch ohne Cookies durchschleifen kann.
So nun zu den Beispielen
Einfache Registrierung von Variablen
Datei: sess.howto1.php
<?php   @session_start();   session_register('s_userName', 's_userPerm');   $s_userName = 'dtg';   $s_userPerm = 'nada'; ?> <html> <body>   <h1>     Datei: <?php echo getenv('SCRIPT_NAME') ?>   </h1>   <p>      Es wurden Variablen in der Session registriert.   </p>   <a href="sess.howto2.php">Weiter ...</a> </body> </html>
Datei: sess.howto2.php
<?php   @session_start(); ?> <html> <body>   <h1>     Datei: <?php echo getenv('SCRIPT_NAME') ?>   </h1>   <p>     Folgende Variablen wurden in der Session registriert:   </p>   <?php     foreach ($HTTP_SESSION_VARS as $k => $v) {       echo '<p>' . $k . ' = ' . $v . '</p>';     }   ?>   <a href="sess.howto1.php">Zurück ...</a> </body> </html>
Registrierung mit Formular
Datei: sess.howto3.php
<?php   @session_start();   if (isset($HTTP_POST_VARS['submit'])) {     session_register('s_userUnfug');     $s_userUnfug = $HTTP_POST_VARS['s_userUnfug'];     header('Location: http://'.getenv('HTTP_HOST').'/sess.howto4.php');     exit;   } ?> <html> <body>   <h1>     Datei: <?php echo getenv('SCRIPT_NAME') ?>   </h1>   <form action="<?php echo getenv('SCRIPT_NAME') ?>" method="post">     <p>       Hier kannst du Unfug eingeben:     </p>     <input name="s_userUnfug"            type="text"            value="<?php                      echo $HTTP_SESSION_VARS['s_userUnfug']                    ?>">     <input name="submit" type="submit">   </form> </body> </html>
Datei: sess.howto4.php
<?php   @session_start(); ?> <html> <body>   <h1>     Datei: <?php echo getenv('SCRIPT_NAME') ?>   </h1>   <p>     Das ist Unfug:     <?php echo $HTTP_SESSION_VARS['s_userUnfug'] ?>   </p>   <a href="sess.howto3.php">Zurück ...</a> </body> </html>
Nachdem du dieses zweite Beispiel ausgeführt hast, führe nochmal das erste Beispiel (”Einfache Registrierung von Variablen”) aus. Jetzt wird auch die Variable userUnfug aus dem zweiten Beispiel angezeigt – sie ist in den Session-Daten gespeichert.
Diese Variablen verbleiben in den Session-Daten bis sie explizit mit session_unregister() ‘entfernt’ werden, die Session-Daten gänzlich – z.B. mit session_destroy() – gelöscht werden oder die Session ihre Lebensdauer erreicht (php.ini: session.gc_maxlifetime).