Z dokumentacji php.net :
session_destroy - niszczy wszystkie dane zarejestrowane w sesji
session_unset - zwolnij wszystkie zmienne sesji
Moje trzyczęściowe pytanie brzmi:
Te dwie funkcje wydają się bardzo podobne.
Jaka jest tak naprawdę różnica między nimi?
Oba wydają się usuwać wszystkie zmienne zarejestrowane w sesji. Czy któryś z nich faktycznie niszczy samą sesję? Jeśli nie, jak tego dokonasz (zniszcz samą sesję).
Czy to prawda, że żadna z tych dwóch funkcji nie usuwa sesyjnego pliku cookie u klienta?
źródło
local $_SESSION variable instance vs session data in the session storage
. Z tego co wiem, jest 1000 takich ludzi jak ja, którzy nie zrozumieli twojego zdania. Dziękisession_destroy();
usuwa całą sesję.session_unset();
usuwa tylko zmienne z sesji - sesja nadal istnieje. Obcinane są tylko dane.źródło
Przykład :
session_start(); session_destroy(); $a = "1234"; $_SESSION[a] = $a;
session_start(); session_unset(); $a = "1234"; $_SESSION[a] = $a;
Więc użyję:
session_start(); session_destroy(); session_start(); $a = "1234"; $_SESSION[a] = $a;
źródło
session_unset();
NIE robisz nic, ponieważ nadal możesz korzystać z sesji$_SESSION["a"]
, więc po co z tego?$_SESSION[a]
powinno być$_SESSION['a']
iw przeciwieństwie do tego, co powiedziałeś, NIE JEST NULL w twoim pierwszym przykładziesession_unset()
wyczyści$_SESSION
zmienną (jak warray()
), ale nie dotknie pliku sesji. Ale kiedy skrypt się kończy; stan$_SESSION
zostanie zapisany do pliku. Wtedy wyczyści plik, ale go nie usunie. Kiedysession_destroy()
go użyjesz , nie dotknie$_SESSION
(Użyjvar_dump($_SESSION)
posession_destroy()
), ale usunie plik sesji, więc po zakończeniu działania skryptu nie będzie pliku do zapisania stanu$_SESSION
.źródło
session_destroy()
usunie sesję po przeniesieniu strony isession_unset()
usunie sesję po uruchomieniu kodu.źródło
Próbowałem użyć
session_unset($_SESSION['session_name'])
myślenia, że spowoduje to tylko usunięcie konkretnej lub indywidualnej / pojedynczej nazwy sesji. Ale użyciesession_unset($_SESSION['session_name'])
spowoduje tylko usunięcie wszystkich nazw sesji. Prawidłowy kod do użycia to tylkounset($_SESSION['session_name'])
wtedy, gdy chcesz usunąć nazwę pojedynczej sesji.źródło
session_start (); # utworzy wirtualną tablicę (asocjacyjną) w pamięci czasu rzeczywistego przeglądarki
dodano dwie pozycje
> $_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()
testuj blok 1, 2 lub 3 indywidualnie, komentując innych
źródło
Myślę, że session_destroy () i session_unset () powinny być używane w tym samym czasie, aby upewnić się, że dane sesji zostały na pewno usunięte.
źródło
session_unset()
późniejsession_destroy()
byłoby bezcelowe. Służysession_unset()
do usuwania wszystkich kluczy i wartości z superglobalnej tablicy $ _SESSION lubsession_destroy()
do usuwania całej sesji; nie używaj obu tylko do „upewnienia się”, ufaj funkcji, że wykonuje swoje zadanie.session_destroy()
nie wyłącza sess superglobal var aż do wyjścia z bieżącej strony.