Jaka jest różnica między session unset() a session destroy () w PHP?

Z php.net Dokumentacja:

Session_destroy - niszczy wszystkie dane zarejestrowane na sesji

Session_unset - wolne wszystkie zmienne sesji

Moje trzyczęściowe pytanie brzmi:

Obie funkcje wydają się bardzo podobne.
Jaka jest naprawdę różnica między tymi dwoma?

Oba zdają się usuwać wszystkie zmienne zarejestrowane w sesji. Czy któraś z nich faktycznie niszczy samą sesję? Jeśli nie, jak to osiągnąć (zniszczyć samą sesję).

Czy to prawda, że żadna z dwóch funkcji nie usuwa pliku cookie sesji u klienta?

Author: Ashwini Agarwal, 2010-11-29

7 answers

session_unset wystarczy wyczyścić zmienną $_SESSION. Jest równoznaczne z wykonaniem:

$_SESSION = array();

Tak więc dotyczy to tylko lokalnej instancji zmiennej $_SESSION, ale nie danych sesji w magazynie sesji.

W przeciwieństwie do tego, session_destroy niszczy dane sesji, które są przechowywane w pamięci sesji (np. plik sesji w systemie plików).

Wszystko inne pozostaje bez zmian.
 115
Author: Gumbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 10:20:37

session_destroy(); kasuje całą sesję.

session_unset(); usuwa tylko zmienne z sesji - sesja nadal istnieje. Tylko dane są okrojone.

 14
Author: Xamael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-04 17:24:06
session_unset();

Po prostu wyczyść wszystkie dane ze wszystkich zmiennych sesji.


session_destroy();

Usuń całą sesję.


przykład :
session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a] is NULL.


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

$_SESSION[a] is 1234.


Więc użyję:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;
 14
Author: SLyHuy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-07 12:33:44

session_unset() wyczyści zmienną $_SESSION (Jak w array()), ale nie dotknie pliku sesji. Ale kiedy skrypt się skończy, stan $_SESSION zostanie zapisany do pliku. Następnie wyczyści plik, ale nie usunie go. Gdy użyjesz session_destroy() nie dotknie $_SESSION (Użyj var_dump($_SESSION) Po session_destroy()), ale usunie plik sesji, więc po zakończeniu skryptu nie będzie pliku do zapisania stanu $_SESSION.

 4
Author: kaushik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-04 06:43:18

session_destroy() usunie sesję po przeniesieniu strony oraz session_unset() usunie sesję po uruchomieniu kodu.

 0
Author: Radian Yusuf Mahendra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-18 06:26:34

Próbowałem użyć session_unset($_SESSION['session_name']) myśląc, że będzie to tylko unset konkretnej lub indywidualnej/pojedynczej nazwy sesji. Ale użycie session_unset($_SESSION['session_name']) wyłączy tylko całą nazwę sesji. Właściwy kod do użycia to unset($_SESSION['session_name']), jeśli chcesz wyłączyć nazwę pojedynczej sesji.

 0
Author: Marvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 02:42:37

Myślę, że session_destroy () i session_unset() powinny być używane w tym samym czasie, aby upewnić się, że dane sesji są na pewno usunięte.

 -2
Author: Riaj Mahmud Rasel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-02 13:14:53