Hallo
Kürzlich haben ja einige Leute ähnliche Probleme beschrieben, nämlich dass in PHP-Scripten hin und wieder $_POST und $_SESSION leer sind:
http://forum.de.selfhtml.org/archiv/2004/5/80821/
Und zwar habe ich ein Session-basiertes Login, und auf Rechnern mit einem bestimmten Browser/OS werde ich ständig ausgeloggt, und das kein Stück reproduzierbar, wenn ich dieselben Klicks nach denen ich einmal rausgeflogen bin wiederhole, passiert vielleicht gar nichts, oder ich fliege schon mittendrin raus. Mal geht es 100 Klicks gut, mal nur 2.
Jetzt habe ich nochmal den Rechner genommen, auf dem mir das Problem aufgefallen war. Hierbei handelt es sich um ein Notebook mit WinXP Professional SP1 + IE6 SP1 (Auf einem anderen System, ebenfalls mit IE6 SP1, nur WinXP Home, passiert dasselbe. Auf Win2000 konnte ich es bisher komischerweise nicht provozieren).
Um das Problem eingrenzen zu können habe ich auf dem Rechner Ethereal (http://www.ethereal.com/download.html) installiert, um zu verfolgen, wie sich IE und Apache unterhalten. Dadurch konnte ich sehen _wieso_ ich ausgeloggt wurde. Und zwar sollte der IE eigentlich bei jedem Request den Session-Cookie mitsenden, macht manchmal aber eben nicht - ohne ersichtlichen Grund. Wenn PHP keine Session-ID erhält, fliege ich natürlich raus - klar! Gut, aber woran kann das liegen? Wie gesagt lässt sich das Problem nicht wirklich eng einkreisen, da nicht reproduzierbar, aber ich kann es besonders provozieren.
Ich muss in sehr vielen Formularen
ectype="multipart/form-data"
verwenden, daher kann ich nicht wirklich sagen ob es hiermit zusammenhängt. Dazu kommt, dass ich des öfteren per Javascript Popups öffne, in denen die Session ebenfalls gelten soll. Das Problem tritt meist in diesem Zusammenhang auf. Ich öffen ein Popup, und auf einmal sendet der IE keinen Cookie mit dem entsprechenden HTTP-Request. Öffne ich beim nächsten "Reproduktions-Versuch" exakt dieses Popup über denselben Klick nochmal, funktioniert auf einmal alles, und auch umgekehrt passiert sowas. Ich kann es dann 10 mal probieren und es geht jedes mal. Wenn ich oft genug Popups öffne und Formulare abschicke... dann ist es nur eine Frage der Zeit bis es wieder passiert. Aber wann und wo ist überhaupt nicht vorhersehbar.
Aber es passiert auch folgendes:
Manchmal öffne ich ein Popup, und schicke das Formular im Opener-Fenster gleichzeitig ab, damit die evtl. eingegebenen Daten nicht aus Versehen verloren gehen. Das geht auch zig mal gut, aber manchmal - ohne ersichtlichen Grund, fliege ich hier aus beiden Fenstern raus! Das heißt, sowohl beim GET-Request zum Öffnen des Popups, als auch beim POST-Request zum Speichern der Formulardaten im Opener-Fenster, wird der Session-Cookie nicht mitgesendet, gleichzeitig!
Es hat in jedem Fall irgendwas mit den als Popup geöffneten Fenstern zu tun.
Dass allerdings POST-Daten verloren gehen habe ich bisher nicht mitbekommen. Diese werden immer mitgeschickt bei mir. Ob die auch ankommen habe ich bisher nicht kontrolliert, aber ich hatte diesbezüglich bisher keine Probleme. Das Problem liegt definitiv beim IE im Zusammenhang mit Fenstern und Cookies. Natürlich könnte ich jetzt in alle Javascripte die Session-ID in die Links einbauen, aber eigentlich wollte ich mich auf Cookies verlassen, weil ich die gerade für Session-IDs für nahezu ideal halte. Das kann ich dann aber wohl leider vergessen...
Ich überlege mir auch schon fieberhaft Alternativen, aber die einzige Idee die ich hätte ist die Verwendung der SSL-Session ID als Session-ID für PHP, aber dann läuft die Software ja definitiv nur noch über SSL, was natürlich im produktiv-Betrieb der Fall sein wird, aber zum Testen... mal sehen. Habt Ihr vielleicht noch eine Idee?
Oder kennt jemand das Problem und weiß vielleicht sogar wie man es beheben kann? Das Problem trat bisher wirklich nur mit dieser einen Browser-OS Kombination auf. Sehr seltsam...
Mit dem IE stehe ich eh auf Kriegsfuß, denn netterweise hat der IE5 SP4 ein kleines Problem mit gzip-Komprimierung. Das klappt _eigentlich_ wunderbar, aber ich hatte eine einzige Seite, wo er reproduzierbar immer eine leere Seite ausgegeben hat, die Quelltext-Ansicht zeigte, dass nur die 1. Hälfte des Quelltextes vorhanden war, es hört irgendwo recht unmotiviert und ohne irgendwelchen kritischen Code in der Nähe nach einem <td> einfach auf, und meldete einen unbekannten Fehler.
Schalte ich die gzip-Komprimierung ab, funktioniert alles wunderbar.
Komprimierung lasse ich durch PHP durchführen, und zwar per php.ini Eintrag:
zlib.output_compression = On
Viele Grüße
Andreas
SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/