Mailinglisten-Archive |
Hallo ! Ich beschaeftige mich nun zum ersten Mal so richtig mit den von PHP4 bereitgestellten Session-Funktionen. Vorher habe ich mit einer eigenen Session-Library (s2lib) gearbeitet, welche noch aus PHP3-Zeiten stammt. Nun gut, ich dachte es waere an der Zeit, den ganzen Overhead mal loszuwerden und mit den nativen Session-Funktionen von PHP4 zu arbeiten. Das Verhalten jener verwundert mich jedoch sehr. Kleines Beispiel: Datei 1.php: ============ <?php session_start(); print "count ist: " . $HTTP_SESSION_VARS[count] . "<p>"; ?> <h3>Ok.</h3> <a href="2.php?<?=SID?>">2.php</a> ============= Datei 2.php: ============ <?php session_start(); session_register("count"); if (!$count) $count = 1; else $count++; ?> <h3>Ok.</h3> <a href="1.php?<?=SID?>">1.php</a> ============= Ok, ich denke mal, dass das Beispiel klar sein duerfte, und soweit funktioniert es auch, vom Sinn mal ganz abgesehen. Also: Zuerst Aufrufen von 1.php. Es wird die Frage gestellt, ob man den Cookie PHPSESSID mit eben der neuen Session-ID annehmen moechte. Falls ja, wird die Session-ID im Cookie gespeichert und der Rest ist gegessen. Interessanter ist die Sache, falls ich den Cookie ablehne. Da der Text PHPSESSID={Session-ID} [^1] in SID gespeichert wurde, sollte die URL, welche auf 2.php verweist, entsprechend erweitert werden, so dass jene Seite mit dem URL-Parameter PHPSESSID={Session-ID} aufgerufen wird. Ok, das klappt auch. Was mich hingegen wundert: Klickt man auf die korrekt erweiterte URL 2.php?PHPSESSID={Session-ID} wird erneut versucht, ein Cookie zu setzen. Das Spiel wiederholt sich bei jedem Klick auf die jeweiligen URLs. Dieses Verhalten empfinde ich als extrem suboptimal. Vielmehr hatte ich es mir so vorgestellt, dass zwar beim _ersten_ Initialisieren bzw. Erzeugen der Session-ID nach dem Cookie gefragt wird, aber dann nie mehr wieder. D.h. verweigert man den Cookie, wird die URL erweitert. Klickt man auf die naechste URL, ist die Session doch durch den GET-Parameter gegeben, ergo muss doch gar nicht mehr nach dem Cookie gefragt werden, sondern die Session-ID kann anhand des GET-Parameters festgestellt werden. Andernfalls wird man bei jedem Klick auf eine dieser URLs nach dem Cookie gefragt, obgleich die Session-ID als GET Parameter uebergeben wird, und obgleich man die Frage bereits beim allerersten Klick auf eine der URLs verneint hat. Dies ist IMHO ziemlich stoerend, weil man entweder nach wenigen Klicks so genervt ist, dass man den Cookie akzeptiert - oder die Site gleich wieder verlaesst. Also mir geht es zumindest so. ;-) Nun laesst sich wohl global in der php.ini einstellen, ob Cookies ueberhaupt benutzt werden sollen. Dies hilft jedoch nicht weiter, denn eigentlich moechte ich den Nutzer vor die Wahl stellen - eben wenn er Cookies akzeptiert, werden diese genutzt, andernfalls die Session-ID in der URL gespeichert, aber dann soll auch bitte nicht bei jedem Klick erneut die Frage nach dem Cookie gestellt werden. Tja, nun stellt sich die Frage, ob ich etwas uebersehen, fehlerhaft implementiert oder falsch getestet habe? Oder gibt es Workarounds oder undokumentierte Funktionen, welche das Session-Verhalten beeinflussen? Wie erwaehnt, in diversen Buechern oder dem Manual habe ich nichts dergleichen gefunden. Das o.g. Beispiel liegt unter http://www.bttr.org/test/1.php Vielen Dank & Beste Gruesse, Ralf [^1] Man ersetze {Session-ID} durch die eben jeweils gueltige 32-stellige Session-ID. -- : www : http://www.bttr.org : http://der.leitweganzeiger.de : mail : ralf_(at)_bttr.org ::: rg_(at)_leitweganzeiger.de
php::bar PHP Wiki - Listenarchive