Ich versuche, zwei fast gleichzeitige Anfragen aus derselben Browsersitzung zu bedienen.PHP-Sitzungen blockieren, Ignorieren session_write_close
Betrachten Sie das folgende Beispiel minimal:
<?php
session_start();
$sessionId = session_id();
session_write_close();
$file = sys_get_temp_dir() . '/lock_test';
if (!file_exists($file)) {
touch($file);
sleep(5);
unlink($file);
echo 'done! ' . $sessionId;
} else {
echo 'locked! ' . $sessionId;
}
Die zweite Anfrage im „gesperrt“ Ausgabe zur Folge haben sollte, aber es wartet immer auf die erste Anforderung abgeschlossen und gibt dann „fertig“.
Xdebug läuft nicht. Die PHP-Version ist 5.5.
Edit:
Voting dies als Duplikat zu schließen. Die verknüpfte Frage weist darauf hin, dass Sie eine Zufallsvariable anhängen, um dieses Problem zu umgehen. Daher würde ich empfehlen, eine requestTime-Variable anzuhängen und sie auf einen Zeitstempel mit Mikrosekunden zu setzen.
Wie machen Sie diese Anfragen? – PeeHaa
Hit das Skript von einem Browser. Angeblich kann diese Methode verwendet werden, um mehrere Ajax-Anfragen zu ermöglichen, ohne dass sie sich gegenseitig so lange blockieren, wie sie es ohne sie tun würden. – bcmcfc
Haben Sie versucht, die Datei IO (nur Sitzungsstart/schließen Schlaf und Echo) zu entfernen? – Vatev