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?
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).
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.
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]
isNULL
.
session_start();
session_unset();
$a = "1234";
$_SESSION[a] = $a;
$_SESSION[a]
is1234
.
Więc użyję:
session_start();
session_destroy();
session_start();
$a = "1234";
$_SESSION[a] = $a;
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
.
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.
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.
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.
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