Werden über Ajax mehrere Anfragen gleichzeitig gesendet, verhindert die Initialisierung der Session die parallele Verarbeitung. Man muss warten, bis Skript A fertig ist, damit Skript B verarbeitet werden kann, und so weiter. Es hangt also.
Bei Verwendung einer Sitzung verarbeitet PHP für diese Sitzung jeweils nur eine Anforderung. Dies liegt daran, dass session_write_close()
automatisch aufgerufen wird, wenn das Skript beendet wird. Wenn also die Ausführung des ersten Aufrufs 60 Sekunden dauert, müssen die anderen Aufrufe warten. Dies wird als Sitzungssperre bezeichnet und ist wichtig, um Race Conditions zu verhindern.
Wenn Ihre AJAX-Aufrufe keine Sitzungsdaten benötigen, öffnen Sie in diesen Skripten keine Sitzung.
Wenn Ihre AJAX-Aufrufe Sitzungsdaten benötigen, führen Sie session_write_close()
aus, sobald Sie das Sitzungsarray nicht mehr benötigen.
Nachfolgend finden Sie ein Beispiel, wie Sie die Sitzungssperre verringern können:
<?php
// code bla bla bla
// session wird benötigt
session_start();
// session wird gelesen und in eine variable geschrieben
$user_id = $_SESSION[ 'user_id' ];
// session wird geschlossen und für andere session frei gegeben
session_write_close();
// dan alles andere, db selects etc
// select * from whatever where user_id = $user_id
// am schluss zurück als json
echo json_encode( $db_results );