web-dev-qa-db-de.com

Was ist der Unterschied zwischen session_unset () und session_destroy () in PHP?

Aus der php.net Dokumentation:

session_destroy - Zerstört alle für eine Sitzung registrierten Daten

session_unset - Geben Sie alle Sitzungsvariablen frei

Meine dreiteilige Frage lautet:

Die beiden Funktionen scheinen sehr ähnlich zu sein.
Was ist eigentlich der Unterschied zwischen den beiden?

Beide scheinen alle für eine Sitzung registrierten Variablen zu löschen. Zerstört einer von ihnen die Sitzung selbst? Wenn nicht, wie erreichen Sie dies (zerstören Sie die Sitzung selbst)?.

Ist es richtig, dass keine der beiden Funktionen das Sitzungscookie auf dem Client löscht?

83
Johan

session_unset löscht nur das $_SESSION Variable. Es ist gleichbedeutend mit:

$_SESSION = array();

Das betrifft also nur den lokalen $_SESSION Variable Instanz, aber nicht die Sitzungsdaten im Sitzungsspeicher.

Im Gegensatz dazu ist session_destroy zerstört die Sitzungsdaten, die im Sitzungsspeicher gespeichert sind (z. B. die Sitzungsdatei im Dateisystem).

Alles andere bleibt unverändert.

134
Gumbo

session_destroy(); löscht die gesamte Sitzung.

session_unset(); löscht nur die Variablen aus der Sitzung - die Sitzung ist noch vorhanden. Nur Daten werden abgeschnitten.

16
Xamael

session_unset() löscht die Variable $_SESSION (wie in array()), berührt jedoch nicht die Sitzungsdatei. Aber wenn das Drehbuch endet; Der Status von $_SESSION wird in die Datei geschrieben. Dann wird die Datei gelöscht, aber nicht gelöscht. Wenn Sie session_destroy() verwenden, berührt es nicht $_SESSION (Verwenden Sie var_dump($_SESSION) nach session_destroy()), sondern löscht die Sitzungsdatei, also beim Skript Exits gibt es keine Datei, in die der Status von $_SESSION geschrieben werden kann.

5
kaushik

Ich habe versucht, session_unset($_SESSION['session_name']) zu verwenden, da ich dachte, dass nur bestimmte oder einzelne/einzelne Sitzungsnamen nicht gesetzt werden. Mit session_unset($_SESSION['session_name']) werden jedoch nur alle Sitzungsnamen zurückgesetzt. Der richtige Code ist nur dann unset($_SESSION['session_name']), wenn Sie einen einzelnen Sitzungsnamen aufheben möchten.

0
Marvin

session_destroy() löscht die Sitzung nach dem Verschieben der Seite und session_unset() löscht die Sitzung, wenn der Code ausgeführt wird.