Hi,
ich zerbrech mir gerade seit mehreren Stunden das Hirn.
Folgendes Situation:
Wir haben eine Seite, sie läuft auf unserem Web-Server Cluster. Die Server werden (ich glaube) per round-robin angesprochen. Sprich, ich lande bei jedem Request auf einem anderen Server.
Um Session-Persitenz zu erreichen, wird sharedance eingesetzt. Klappt im Normalfall auch ganz gut.
Man loggt sich also auf der Seite ein - ob man eingeloggt ist, oder nicht wird in den Sessiondaten gespeichert. Mancher Content (in dem Fall Bilder) dürfen nur gezeigt werden, wenn man entsprechende Rechte hat.
Im Beispiel habe ich zb die Startseite für angemeldete Benutzer, die die Leute anzeigt, die zuletzt meine "persönliche" Seite besucht haben. Dort werden (zB) 5 Thumbnails ausgegeben. Die Thumbnails werden über eine PHP Datei angezeigt, die je nach Status (eingeloggt oder nicht, Rechte oder nicht) entweder das User-Bild oder ein Platzhalter Bild anzeigt.
Damit das ganze funktioniert, wird in der Bild.php natürlich auch ein session_start() gemacht.
Nun zum Problem:
Es kommt vor, das User rausgeschmissen werden. Leider ist das ganze nicht reproduzierbar - sie werden beim wechsel von einer Seite zur nächsten einfach rausgeschmissen. Teils kommt es vor, das ihr Session-Cookie vom Browser nicht mehr mitgesendet wird, oder der $_SESSION-Array ist leer. (also anscheinend neue "jungfräuliche" Session)
Hier nun meine Theorie. Ich glaube, das das mehrmalige starten der Session (n mal bild.php und seite.php) zu Problemen führt. Soweit ich weiß, führt Sharedance kein Locking der Session Daten durch. Dadurch würde das session_start() in der bild.php die Session aus seite.php evtl überschreiben. Siehe (http://leo.freeflux.net/blog/archive...x-und-php.html).
Ich hab auch schon nen Sessionhandler mit mcache genommen, habe da aber das selbe Problem.
Wenn ich das ganze auf einem anderen Server Teste, der keine "spezielle" Sessionverwaltung hat, funktioniert alles tadellos. Auch ein Cluster mit vorgeschalteten Loadbalancer (der den User entsprechend auf einen der webserver "klebt") macht keine Probleme - einzig in der sharedance/mcache Umgebung.
Ich würde gerne verstehen, warum mir die Session abhaut - habt ihr noch Tips für mich? Wie kann ich besser an das Problem ran gehen? Habt ihr auch schon mal Probleme mit Sessions in Web-Clusterumgebungen gehabt?
Dank euch schonmal.
ich zerbrech mir gerade seit mehreren Stunden das Hirn.
Folgendes Situation:
Wir haben eine Seite, sie läuft auf unserem Web-Server Cluster. Die Server werden (ich glaube) per round-robin angesprochen. Sprich, ich lande bei jedem Request auf einem anderen Server.
Um Session-Persitenz zu erreichen, wird sharedance eingesetzt. Klappt im Normalfall auch ganz gut.
Man loggt sich also auf der Seite ein - ob man eingeloggt ist, oder nicht wird in den Sessiondaten gespeichert. Mancher Content (in dem Fall Bilder) dürfen nur gezeigt werden, wenn man entsprechende Rechte hat.
Im Beispiel habe ich zb die Startseite für angemeldete Benutzer, die die Leute anzeigt, die zuletzt meine "persönliche" Seite besucht haben. Dort werden (zB) 5 Thumbnails ausgegeben. Die Thumbnails werden über eine PHP Datei angezeigt, die je nach Status (eingeloggt oder nicht, Rechte oder nicht) entweder das User-Bild oder ein Platzhalter Bild anzeigt.
Damit das ganze funktioniert, wird in der Bild.php natürlich auch ein session_start() gemacht.
Nun zum Problem:
Es kommt vor, das User rausgeschmissen werden. Leider ist das ganze nicht reproduzierbar - sie werden beim wechsel von einer Seite zur nächsten einfach rausgeschmissen. Teils kommt es vor, das ihr Session-Cookie vom Browser nicht mehr mitgesendet wird, oder der $_SESSION-Array ist leer. (also anscheinend neue "jungfräuliche" Session)
Hier nun meine Theorie. Ich glaube, das das mehrmalige starten der Session (n mal bild.php und seite.php) zu Problemen führt. Soweit ich weiß, führt Sharedance kein Locking der Session Daten durch. Dadurch würde das session_start() in der bild.php die Session aus seite.php evtl überschreiben. Siehe (http://leo.freeflux.net/blog/archive...x-und-php.html).
Ich hab auch schon nen Sessionhandler mit mcache genommen, habe da aber das selbe Problem.
Wenn ich das ganze auf einem anderen Server Teste, der keine "spezielle" Sessionverwaltung hat, funktioniert alles tadellos. Auch ein Cluster mit vorgeschalteten Loadbalancer (der den User entsprechend auf einen der webserver "klebt") macht keine Probleme - einzig in der sharedance/mcache Umgebung.
Ich würde gerne verstehen, warum mir die Session abhaut - habt ihr noch Tips für mich? Wie kann ich besser an das Problem ran gehen? Habt ihr auch schon mal Probleme mit Sessions in Web-Clusterumgebungen gehabt?
Dank euch schonmal.
EDIT:
Das ganze ist leider nicht Browserspezifisch. Ich lass mir aktuell ne mail senden, wenn ein USer auf der Seite kein PHPSESSID Cookie hat - da sind leider mehrere Browser dabei (IE, FF, Opera). Hab auch schon mit den P3P Headern rumgespielt.
Kommentar