phpbar.de logo

Mailinglisten-Archive

[php] Sessionhandling

[php] Sessionhandling

Tobias Ratschiller tobias_(at)_dnet.it
Thu, 3 Feb 2000 14:06:46 +0100


> Welche Möglichkeiten hat man noch wenn man keine Cookies verwenden kann
> und die Anfrage auch nicht ans URL anghängen kann da es zulang wird ?!

Du hast mindestens vier Möglichkeiten, eine Session-ID auf dem Client zu
speichern, d.h. benutzerpersistent zu machen.

- Cookies
- GET/POST
- Path
- DNS Tricks

Cookies sind für solche Vorhaben erfunden worden und sollten verwendet
werden. Sie haben den Vorteil, daß man im Gegensatz zu allen anderen
Methoden, die Speicherdauer der Session exakt kontrollieren kann; evt. kann
man eine Session über mehrere Besuche hinweg retten. Der Nachteil ist
bekannt: Nicht jeder Client unterstützt Cookies.

GET/POST ist als Alternative zu Cookies beliebt. Die Session-ID wird dabei
als normale PHP-Variable übergeben, z.B. mit script.php3?session_id=<id>
oder durch versteckte Formularfelder. Diese Möglichkeit hat den Vorteil, daß
sie garantiert mit allen Browsern oder Web-Servern funktioniert.
Nachteile:
- Du musst alle Links Deiner Anwendung umschreiben und manuell mit der
Session-ID versehen. Vergisst Du einen Link, geht die Session flöten.
- Die Session-ID ist Teil der URL und scheint im HTTP_REFERER bei fremden
Sites auf, ebenso in Deinen Log-Dateien und in Proxy-Logs.
- Die Session-ID wird mit gebookmarkt, oder als Teil der Adresse
weitergegeben.
- Man merkt sofort, daß Deine Seite dynamisch generiert ist; Suchmaschinen
werden sich eventuell weigern, die Seite zu indizieren.

Path: Wir in einem Artikel von mir auf http://www.php-center.de dargestellt,
kann man Variablen auch in den Pfad der URL einarbeiten. Damit schaut die
Seite wie eine statische Seite aus und wird entsprechend von Suchmaschinen
behandelt. Deine URL könnte dann so aussehen:
http://www.server.com/script.php3/<sessionid>. Diese Methode erfordert
Handarbeit [1] sowohl beim Extrahieren der Session-ID aus dem Pfad, als auch
beim Umschreiben aller Links Deiner Anwendung. Außerdem gelten diesselben
Nachteile (außer dem letzten) wie bei GET/POST.

Mit DNS-Tricks kann man die Session-ID direkt im Hostnamen verstecken. Deine
URL sieht dann beispielsweise so aus:
http://01727303a49ef3f34dd7c4a07acd2c1a.phpwebdev.com:1084/sessions/basic.ph
p3
Es gelten dieselben Nachteile wie bei Path, bloß musst Du auf diese Weise
keine Links in Deiner Anwendung anpassen. Wie das technisch genau geht, kann
man kurz in einem Artikel von Kris Köhntopp auf PHP-Dev (Suche nach
"fahrschulportal") nachlesen; detailliert erkläre ich es später mal [2].

Im allgemeinen solltest Du eine Mischung aus Cookies und entweder GET/POST
bzw Path benutzen. Teste, ob Dein Besucher Cookies unterstützt, und benutze
sie, falls vorhanden. Falls nicht, benutze GET/POST bzw. Path.

Es gibt noch einige andere Tricks, zum Beispiel, alle Seiten in ein Frame zu
setzen und darin die Session-ID zu speichern, und per JavaScript in den
anderen Seiten auslesen. Für professionellen Einsatz eignen sich diese
nicht.

Mit freundlichen Grüßen,
  Tobias Ratschiller

[1] PHP 4.0 unterstützt automatisches Umschreiben aller Links, um die
Session-ID einzbauen. Das hat einen Performance-Nachteil.
[2] Web Application Development With PHP; Tobias Ratschiller, Till Gerken;
New Riders, irgendwann um den Mai/Juni 2000
--
<?$I=1.125;while($I>=-1.225){for($l=    /*   Tobias Ratschiller     */
-2;$l<=1;$l+=3/79){$Q=$u=0;for($E=127;  /*   New Media Consultant   */
$Q*$Q+$u*$u<4&&--$E>32;){$o=$Q;$Q=$Q*   /*   http://phpWizard.net   */
$Q-$u*$u+$l;$u=2*$o*$u+$I;}printf("%c",$E);}print("\n");$I-=9/88;}  ?>



php::bar PHP Wiki   -   Listenarchive