In PHP ist die Verarbeitung des Lebenszyklus einer Sitzung eine gemeinsame Operation, insbesondere wenn es erforderlich ist, den Benutzerstatus zu sparen oder Daten zwischen mehreren Seiten zu teilen. PHP bietet zwei Möglichkeiten, eine Sitzung zu zerstören: SessionHandler :: Destroy () und Session_Destroy () . Obwohl ihre Namen ähnlich sind, gibt es einige wichtige Unterschiede im Gebrauch. Dieser Artikel erläutert den Unterschied zwischen den beiden im Detail und hilft Ihnen bei der Auswahl der am besten geeigneten Möglichkeit, die Sitzung zu zerstören.
Session_Destroy () ist eine integrierte Funktion in PHP, um die aktuelle Sitzung zu zerstören. Diese Funktion löscht alle Daten im Zusammenhang mit der aktuellen Sitzung und löscht das $ _Session -Array der Sitzung. Beachten Sie, dass Session_destroy () die Sitzung nur als zerstört markiert. Sie löscht nicht alle Daten für die Sitzung und löscht die Daten erst dann, wenn die nächste Seite geladen wird.
Session_Destroy () löscht Datensätze in der Datei oder Datenbank, in der Sitzungsdaten auf dem Server enthalten sind.
Es löscht die Daten im $ _Session -Array nicht. Tatsächlich existiert das $ _Session -Array immer noch nach der Zerstörung der Sitzung, speichert jedoch keine gültigen Daten mehr.
Session_Start () muss aufgerufen werden, um die Sitzung zu initialisieren, ansonsten kann Session_destroy () normal aufgerufen werden.
<span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>(); </span><span><span class="hljs-comment">// Starten Sie eine Sitzung</span></span><span>
</span><span><span class="hljs-comment">// Setzen Sie Sitzungsvariablen</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>] = </span><span><span class="hljs-string">'John Doe'</span></span><span>;
</span><span><span class="hljs-comment">// Zerstöre die Sitzung</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>();
</span></span>
SessionHandler :: Destroy () ist eine Methode, die in einem benutzerdefinierten Sitzungsprozessor verwendet wird. Wenn Sie steuern müssen, wie die Sitzung gespeichert wird (z. B. in einer Datenbank und nicht in der Standarddateispeicherung von PHP), können Sie eine benutzerdefinierte Sitzungshandlerklasse implementieren. In diesem Fall zerstört SessionHandler :: Destroy () die Sitzungsdaten und löst den entsprechenden Aufräumvorgang aus.
SessionHandler ist Teil der Funktion Session_set_save_handler () , mit der Entwickler die Speicherung der Sitzungen anpassen können. Durch die Implementierung der Methode Destroy () in der SessionHandler -Schnittstelle können Entwickler spezifische Vorgänge für die Sitzungszerstörung definieren.
SessionHandler :: Destroy () wird auf einen benutzerdefinierten Zerstörungsvorgang berücksichtigt, um sicherzustellen, dass die Sitzungsdaten aus dem benutzerdefinierten Speichersystem gelöscht werden.
Sie müssen Session_set_save_handler () verwenden, um einen benutzerdefinierten Sitzungsprozessor einzurichten.
Sein Ziel ist es, alle mit der Sitzungs -ID bezogenen Daten zu zerstören, normalerweise in einer Datenbank oder einem anderen Speichermedium.
<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">destroy</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$session_id</span></span></span><span>) {
</span><span><span class="hljs-comment">// 自定义Zerstöre die Sitzung数据的操作,Zum Beispiel aus der Datenbank löschen</span></span><span>
</span><span><span class="hljs-comment">// Zum Beispiel:Löschen Sie Sitzungsdatensätze in der Datenbank</span></span><span>
</span><span><span class="hljs-variable">$db</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-variable">$db</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"DELETE FROM sessions WHERE session_id = '<span class="hljs-subst">$session_id</span></span></span><span>'");
</span><span><span class="hljs-comment">// 调用父类的方法以Zerstöre die Sitzung</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__">destroy</span></span><span>(</span><span><span class="hljs-variable">$session_id</span></span><span>);
}
}
</span><span><span class="hljs-comment">// Einrichten eines benutzerdefinierten Sitzungsprozessors</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_set_save_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-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>(); </span><span><span class="hljs-comment">// Starten Sie eine Sitzung</span></span><span>
</span><span><span class="hljs-comment">// Setzen Sie Sitzungsdaten</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>] = </span><span><span class="hljs-string">'Jane Doe'</span></span><span>;
</span><span><span class="hljs-comment">// Zerstöre die Sitzung</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>();
</span></span>
Szenarien verwenden :
Session_destroy () ist eine integrierte Funktion für PHP, die für die normale Sitzungszerstörung geeignet ist, insbesondere wenn keine benutzerdefinierte Sitzungspeicher verwendet wird.
SessionHandler :: Destroy () eignet sich für Szenarien, in denen benutzerdefinierte Sitzungsspeicher verwendet werden, und ermöglicht es Entwicklern, Sitzungen durch die Implementierung einer benutzerdefinierten Sitzungslogik zu zerstören.
Betriebsbereich :
Session_Destroy () zerstört nur Sitzungsdaten, löscht jedoch keine Daten im $ _Session -Array. Dies bedeutet, dass die Daten der Sitzung in der aktuellen Anfrage verbleiben, bis die Seite aktualisiert wird.
SessionHandler :: Destroy () zerstört Sitzungsdaten vollständig und normalerweise werden die Daten aus dem benutzerdefinierten Speicher gelöscht.
Flexibilität :
Session_destroy () ist eine relativ einfache Möglichkeit, sich für die meisten Fälle zu bewerben.
SessionHandler :: Destroy () bietet eine größere Flexibilität und Skalierbarkeit, geeignet für komplexe Anwendungsszenarien, für die benutzerdefinierte Speicher- und Zerstörungsvorgänge erforderlich sind.
Wenn Sie PHP -Standard -Sitzungsspeichermechanismus (z. B. Dateispeicher) verwenden und nur die aktuelle Sitzung zerstören müssen, ist die Verwendung von Session_Destroy () die einfachste und direkteste Art.
Wenn Sie einen benutzerdefinierten Sitzungsspeicher verwenden (z. B. in einer Datenbank gespeichert) und die vollständige Kontrolle darüber möchten, wie Sitzungen zerstört werden, ist SessionHandler :: Destroy () angemessener.
Insgesamt ist Session_destroy () für die meisten herkömmlichen Anwendungsszenarien geeignet, während SessionHandler :: Destroy () besser für Situationen geeignet ist, in denen eine hohe Anpassung erforderlich ist. Welche Methode zu wählen, hängt davon ab, wie Sie Sitzungsdaten und ihre Lebenszyklusverwaltung speichern.