Moin!
ich habe den Fehler gefunden. In diesen PHP-Dateien gab
es ein "session_start()"...
Aus irgendeinem Grund musste ich die auskommentieren, da sonst
dieser komische Effekt aufgetaucht war.
Verstehst du das?
Das ist korrekt. Aufrufe derselben Session müssen sich gegenseitig blockieren, weil ansonsten die Session-Daten durcheinandergeraten.
Angenommen, du hast zwei Skripte. Das erste setzt den Session-Wert "A", das zweite den für "B". Beide werden "gleichzeitig" in zwei Fenstern des Browsers aufgerufen.
Erwartungshaltung: Am Ende der beiden Skripte stehen in der Session die Werte von "A" und "B".
Ablauf: Skript "B" wird einen Tick früher gestartet. Es sperrt die Session-Datei, in der noch absolut "nichts" steht, das Skript läuft durch, der Wert "B" wird in der Session gespeichert, die Sessiondaten werden in die Datei gespeichert, die Datei wird wieder freigegeben. Skript "A" hat solange warten müssen, es liest die Sessiondatei mit "B" ein, fügt "A" hinzu, speichert wieder und gibt die Sessiondatei frei. Jetzt kann Skript "C" die beiden Werte "A" und "B" lesen, wie erwartet.
Wenn Skript A und B tatsächlich gleichzeitig laufen würden, würden beide eine leere Sessiondatei vorfinden, jeweils nur separat "A" oder "B" anlegen und speichern. Das Skript, welches zuletzt speichert, überschreibt das Ergebnis des vorherigen Skriptes, und man kann am Ende nicht "A" UND "B" auslesen, sondern nur eines von beidem. Deshalb sind die Sessiondaten für die Laufzeit des Skriptes gesperrt. Wenn du diese Laufzeit durch sleep() künstlich verlängerst, sperrst du die gesamte Session, die damit zusammenhängt. Mit anderen Worten: Sessions sind bei deiner "Simulation" nicht nutzbar, solange du auf sleep() bestehst.
- Sven Rautenberg
--
"Love your nation - respect the others."