2012-09-13 5 views
8

Ich habe einen Artikel über lange Umfrage unter Nolithius gelesen. Unter dem Abschnitt PHP schläft über die gesamte Sitzung, wird geschrieben, dass die session_write_close Funktion aufgerufen werden sollte, um die gesamte Sitzung zu einem Deadlock zu verhindern. Was genau ist hier mit Deadlock gemeint? Bedeutet dies, dass ohne diese Funktion keine andere Seite aus derselben Domäne, die auf der Client-Seite geöffnet ist, AJAX-Daten von anderen Skripten (wie diesem) empfangen kann, bis diese die Ausführung beendet und das Ergebnis zurückgegeben hat? Warum sollte das passieren? Und wie kann session_write_close hier helfen? Werden Sie nicht die Personalisierung von der Client-Seite entfernen, wenn Sie das nächste Mal eine Seite von dieser Domain anfordern, nachdem er Daten von dieser Anfrage erhalten hat?Warum sollte session_write_close in langen Abfragen verwendet werden?

Antwort

15

Das ist mein Verständnis:

Wenn Datei-basierten Sitzungen jede Anforderung buchstäblich die Datei sperrt die Anforderung bis zum Ende verwendet werden.

Das bedeutet, dass die nächste Anfrage (die auch die Sitzungsdaten verwendet) auf die Freigabe der Sperre warten muss.

Dies wird verwendet, um eine Beschädigung der Sitzungsdaten zu vermeiden.

Die Verwendung von session_write_close() wird bereinigen (aber keine Sitzungsdaten verlieren) und die Sperre früher für die Datei freigeben, so dass andere Anforderungen fortgesetzt werden können.

Dies ist eine gute Übung, besonders wenn Sie Skripte haben, die wahrscheinlich viel schlafen.

+1

Wird nur die Datei, die gerade schläft, gesperrt, oder ist die gesamte Domäne gesperrt, was andere AJAX-Anfragen an andere Skripte, Pageroads usw. nicht erlaubt? – SexyBeast

+0

Wenn Sie so aussehen, ja, wird die gesamte Domäne gesperrt - Wenn Sie alle Ihre Skripte öffnen und die Sitzung verwenden. Am besten ist es, die Sitzung selektiv zu öffnen und zu schließen, wann und wo Sie sie benötigen - anstatt einen umfassenden Sitzungszugriff zu erstellen. – zaf

+0

Also, wenn ich 'session_write_close' verwende, wird das nicht die Sitzung beenden? Das heißt, wenn der Benutzer eine andere Seite von dieser Domäne anfordert, beginnt er dann eine neue Sitzung? – SexyBeast

Verwandte Themen