Bei der Verarbeitung der Sitzung in PHP begegnen wir häufig zwei scheinbar relevante Funktionen: SessionHandler :: Close () und Session_Write_Close () . Obwohl die Namen ähnlich sind und die Funktionen mit der Abschaltung der Sitzung zusammenhängen, variieren ihr Zweck, der Zeitpunkt der Verwendung und die zugrunde liegenden Mechanismen. In diesem Artikel werden die Unterschiede zwischen diesen beiden Funktionen ausführlich untersucht, damit Sie die am besten geeignete Methode entsprechend der tatsächlichen Situation auswählen können.
Session_write_close () ist eine globale Funktion, die den Schreibvorgang der aktuellen Sitzung manuell beendet. Standardmäßig schließt PHP die Sitzung am Ende der Skriptausführung automatisch, jedoch in bestimmten Szenarien (z. B. die Verwendung von Multithreading oder die vorzeitige Veröffentlichung der Sperre) möglicherweise explizit aufrufen.
Die Funktion dieser Funktion ist:
Sitzungsdaten schreiben und speichern.
Veröffentlichen Sie die Sperre der Sitzungsdatei, sodass andere Anfragen auf die Sitzung des Benutzers zugreifen können.
Sobald das aktuelle Skript aufgerufen wurde, kann das aktuelle Skript $ _Session nicht mehr verwenden, um neue Daten zu schreiben, und Lesevorgänge sind weiterhin verfügbar.
SessionHandler :: Close () ist eine Methode in der Sitzungshandlerklasse von PHP. Es wird nicht für direkte Aufrufe von Entwicklern verwendet, sondern von PHP -internen Mechanismen am Ende des Sitzungslebenszyklus bezeichnet.
Wenn Sie einen benutzerdefinierten Sitzungsprozessor verwenden (z. B. Erben der SessionHandlerInterface- oder SessionHandler -Klasse), müssen Sie diese Methode implementieren, um zu definieren, was zu tun ist, wenn die Sitzung geschlossen ist, z. B. das Schließen einer Datenbankverbindung oder das Schreiben in ein Protokoll.
Es ist Teil der Registrierung von Session_set_Save_handler () und wird verwendet, um den Verarbeitungsfluss des Sitzungslebenszyklus zu definieren.
| Merkmal | Session_write_close () | SessionHandler :: Close () |
|---|---|---|
| Typ | Globale Funktionen | Klassenmethoden |
| Ob es vom Entwickler aufgerufen wird | Ja | Nein (intern von PHP genannt) |
| Hauptfunktionen | Sitzungsdaten speichern und freigelassen | Definieren Sie das Verhalten der benutzerdefinierten Sitzung eng |
| Ist es für benutzerdefinierte Sitzungsprozessoren geeignet | NEIN | Ja |
| Szenarien verwenden | Lassen Sie das Sitzungsschloss im Voraus frei | Implementieren Sie die Sitzung des Sitzungslebenszyklusmanagements |
Szenarien mit Session_write_close () :
<span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-comment">// Stellen Sie einige ein Session Daten</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_id'</span></span><span>] = </span><span><span class="hljs-number">123</span></span><span>;
</span><span><span class="hljs-comment">// Lösen Sie das Schloss im Voraus</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_write_close</span></span><span>();
</span><span><span class="hljs-comment">// Andere können in Zukunft ausgeführt werden. Session Logik,Wenn gleichzeitige Anfrage oder Ausgabe</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Session closed early."</span></span><span>;
</span></span>Verwenden Sie benutzerdefinierte SessionHandler :: Close () :
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">MySessionHandler</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">SessionHandler</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">close</span></span><span>(</span><span><span class="hljs-params"></span></span><span>): </span><span><span class="hljs-title">bool</span></span><span> {
</span><span><span class="hljs-comment">// Benutzerdefinierte Logik,例如关闭Daten库连接</span></span><span>
</span><span><span class="hljs-comment">// Oder an Protokolle schreiben, usw.</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-built_in">parent</span></span><span>::</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
}
}
</span><span><span class="hljs-variable">$handler</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">MySessionHandler</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">session_set_save_handler</span></span><span>(</span><span><span class="hljs-variable">$handler</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'foo'</span></span><span>] = </span><span><span class="hljs-string">'bar'</span></span><span>;
</span></span>In diesem Beispiel wird Close () am Ende des Sitzungslebenszyklus automatisch von PHP aufgerufen.
Es hängt von Ihrem Bewerbungsszenario ab:
Wenn Sie den Standard -Sitzungsmechanismus verwenden und die Sitzungssperrung in der Logik nur im Voraus veröffentlichen müssen, um andere Anforderungen zur Fortsetzung der Ausführung zu ermöglichen, sollten Sie Session_Write_Close () verwenden.
Wenn Sie einen benutzerdefinierten Sitzungsspeichermechanismus (z. B. Redis, Datenbanken oder verschlüsselter Speicher usw.) implementieren und das Verhalten jeder Phase des Sitzungslebenszyklus steuern müssen, müssen Sie SessionHandler :: Close () implementieren.
Um einen Satz zusammenzufassen:
Session_write_close () eignet sich für das Kontrolle des Verhaltens. SessionHandler :: Close () eignet sich zur Definition des Verhaltens.
Obwohl beide Funktionen mit der "Schließung" der Sitzung zusammenhängen, sind ihre Verantwortlichkeiten und ihre Verwendung sehr unterschiedlich. Wenn Sie den Unterschied zwischen ihnen verstehen, können Sie stabilere und leistungsfähigere PHP -Anwendungen schreiben. In der täglichen Entwicklung kann die rationale Verwendung von Session_write_close () die durch Sitzungssperrungen verursachten Leistung Engpässe effektiv vermeiden. Mastering SessionHandler :: Close () ist die Grundlage für den Aufbau eines fortschrittlichen Sitzungsmanagementmechanismus.