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

86

Aus der php.net- Dokumentation:

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

session_unset - Gibt alle Sitzungsvariablen frei

Meine dreiteilige Frage lautet:

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

Beide scheinen alle in einer Sitzung registrierten Variablen zu löschen. Zerstört einer von ihnen tatsächlich 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?

Johan
quelle

Antworten:

143

session_unsetlöscht nur die $_SESSIONVariable. Es ist gleichbedeutend mit:

$_SESSION = array();

Dies wirkt sich also nur auf die lokale $_SESSIONVariableninstanz aus, nicht jedoch auf die Sitzungsdaten im Sitzungsspeicher.

Im Gegensatz dazu werden session_destroydie im Sitzungsspeicher gespeicherten Sitzungsdaten (z. B. die Sitzungsdatei im Dateisystem) zerstört.

Alles andere bleibt unverändert.

Gumbo
quelle
@Gumbo Gibt es kein Problem damit, dass session_unset () jetzt veraltet ist? Ich habe das überprüft und es hat bei mir nicht funktioniert.
Navneet
@hakre was ist die Warnung?
GoTo
4
@GoTo: Dieses session_unset wurde verwendet, um globale Variablen zu deaktivieren, die als Sitzungsvariablen registriert wurden, wie es in PHP 4 üblich war. Die Verwendung dieser Funktion ist heute anachronistisch und nicht erforderlich. Der einzige Grund, warum es immer noch in PHP ist, ist wahrscheinlich die Abwärtskompatibilität und sonst nichts. Wenn Sie neuen Code schreiben, sollten Sie ihn nicht verwenden. Wenn Sie es im Code finden, sollten Sie es zusammen mit den Aufrufen von session_register () und den übrigen Funktionen zur Behandlung von PHP 4-Sitzungsvariablen entfernen, es sei denn, Sie befassen sich explizit mit PHP 4-Code.
hakre
5
Trotzdem ist es verwirrend: Bitte beschreiben local $_SESSION variable instance vs session data in the session storage. Wie ich weiß, gibt es 1000 solcher Leute wie mich, die Ihren Standpunkt nicht verstanden haben. Danke
Pratik
1
Ihre Antwort ist zu verwirrt. Bitte überlegen Sie, es zu bearbeiten, da ich immer noch denke, dass beide die Sitzung zerstören
Pratik
17

session_destroy(); löscht die gesamte Sitzung.

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

Xamael
quelle
15
session_unset();

Löschen Sie einfach alle Daten aller Sitzungsvariablen.


session_destroy();

Entfernen Sie alle Sitzungen.


Beispiel :

session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]ist NULL.


session_start();
session_unset();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]ist 1234.


Also werde ich verwenden:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;
SLyHuy
quelle
2
In Ihrem mittleren Beispiel -> session_unset();tun Sie nichts, da Sie die Sitzung von noch verwenden können. $_SESSION["a"] Was nützt es also?
Pratik
1
$_SESSION[a]sollte sein $_SESSION['a'] und anders als das, was Sie gesagt haben, ist dies in Ihrem ersten Beispiel NICHT NULL
Istiaque Ahmed
5

session_unset()löscht die $_SESSIONVariable (wie in array()), berührt jedoch nicht die Sitzungsdatei. Aber wenn das Drehbuch endet; Der Status von $_SESSIONwird in die Datei geschrieben. Dann wird die Datei gelöscht, aber nicht gelöscht. Wenn Sie session_destroy()es nicht berühren $_SESSION(Verwendung var_dump($_SESSION)nach session_destroy()), aber die Session - Datei löschen, so dass , wenn Skript beendet wird es keine Datei sein , den Zustand des zu schreiben $_SESSION.

kaushik
quelle
0

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

Radian Yusuf Mahendra
quelle
0

Ich habe versucht zu session_unset($_SESSION['session_name'])denken, dass nur bestimmte oder individuelle / einzelne Sitzungsnamen nicht festgelegt werden. Mit using session_unset($_SESSION['session_name'])werden jedoch nur alle Sitzungsnamen deaktiviert. Der richtige Code ist nur, unset($_SESSION['session_name'])wenn Sie einen einzelnen Sitzungsnamen deaktivieren möchten.

Marvin
quelle
0

session_start (); #it ​​erstellt ein virtuelles Array (assoziativ) im Echtzeitspeicher des Browsers

zwei Artikel hinzugefügt

> $_SESSION['me'] = "Yadab";  
> $_SESSION['you'] = "Avi";
>
> print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )

test1

> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) 
> print_r($_SESSION); #now the array is Array("you"=>"Avi")

test2

> session_destroy(); #will unset the values of all session variables, but indexes exists 
> print_r($_SESSION); #Output, Array("you"=>undefined)
> #but some browser can store the value in cookies

test3

> session_unset(); #will unset all the main variables not only the values 
> print_r($_SESSION); #that means session array is now empty, like Array()

Testen Sie Block 1, 2 oder 3 einzeln, indem Sie andere auskommentieren

Yadab Sd
quelle
-2

Ich denke, session_destroy () und session_unset () sollten gleichzeitig verwendet werden, um sicherzustellen, dass Sitzungsdaten sicher gelöscht werden.

Riaj Mahmud Rasel
quelle
Ich denke, bedeutet, dass Sie sich über die Antwort nicht sicher sind. Dies sollte ein Kommentar sein, keine Antwort.
Shaiful Islam
4
session_unset()danach session_destroy()wäre sinnlos. Verwenden session_unset()Sie diese Option, um alle Schlüssel und Werte aus dem Superglobal $ _SESSION zu löschen, oder verwenden Sie diese Option, session_destroy()um die gesamte Sitzung zu löschen. Verwenden Sie nicht beide, nur um "sicherzugehen", sondern vertrauen Sie darauf, dass die Funktion ihre Arbeit erledigt.
Redburn
@redburn deaktiviert session_destroy()die sess superglobal var erst, wenn die aktuelle Seite verlassen wird.
Yousha Aleayoub