Mailinglisten-Archive |
Hallo Ralf, vielleicht irre ich, aber ich sehe da evtl. einen Lösungsansatz. Habe das jetzt noch nicht in Script umgesetzt, aber geht es so: 1. Akzeptiert der Browser cookies, wenn nein 2. SID dranhängen. 2b. ansonsten wenn cookies nicht dranhängen nächste Seite: 1. Vor session_start() -> hängt SID dran? -> testen Wenn ja, cookies wurden nicht akzeptiert. 1. Annahme cookies im Script abschalten 2. session_start etc. das könnte funktionieren. War nur so eine Idee, du verfügst, sicherlich über mehr knowhow als ich, aber wollte ich nur einmal zum besten gegeben haben. Grüße Jochen Metzger http://www.steptown.com ...happy shopping in Berlin > > 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 > -- > ** http://www.php-center.de ** > Die PHP-Liste: mailto: php_(at)_phpcenter.de > http://lists.phpcenter.de/mailman/listinfo/php >
php::bar PHP Wiki - Listenarchive