2013-08-31 24 views
6

W podręczniku PHP, opis session_destroy() funkcji jest następująca:Co robi session_destroy() w PHP?

session_destroy() usunięcie wszystkich danych związanych z bieżącej sesji. Nie wyłącza żadnej ze zmiennych globalnych powiązanych z sesją ani nie resetuje pliku cookie sesji. Aby ponownie użyć zmiennych sesji, należy wywołać session_start().

Nie mam pojęcia o tym opisie. Jeśli ta funkcja niszczy wszystkie dane sesji, dlaczego zmienne globalne powiązane z sesją nie są nieustawione? Dlaczego możemy ponownie użyć zmiennych sesji?

+0

Myślę, że przegapiłeś następujące para tej samej strony: Aby całkowicie zabić sesję, jak zalogować użytkownika, należy również anulować identyfikator sesji.Jeśli plik cookie jest używany do propagowania identyfikatora sesji (zachowanie domyślne), plik cookie sesji musi zostać usunięty. do tego można użyć setcookie(). – Satya

+0

'xJeśli ta funkcja niszczy wszystkie dane sesji, to dlaczego zmienne globalne powiązane z sesją nie są rozbrajane?' Ponieważ nie ma sensu robić tego. Zmienne globalne znikną przy następnym żądaniu. –

+0

Zmienne globalne, które * sądzisz *, które są związane z tą sesją, nie są już powiązane z tą sesją, ponieważ sesja została już zniszczona. Możesz używać zmiennych jako zmiennych, ale nie jako zmiennych sesji. Nie ma powodu, aby niszczyć również zmienne, więc prawdopodobnie powinieneś dodać do swojego pytania, dlaczego myślisz inaczej, więc jest bardziej jasne o co pytasz. Być może jest jakiś konkretny problem, z którym potrzebujesz pomocy? – hakre

Odpowiedz

5

Jestem zdezorientowany tym opisem. Jeśli ta funkcja niszczy wszystkie dane sesji, dlaczego zmienne globalne powiązane z sesją nie są nieustawione? Dlaczego możemy ponownie użyć zmiennych sesji?

Dane sesji to dane związane z sesją. Sesja jest zdefiniowana przez jej nazwę (nazwa sesji ) i jej identyfikator (identyfikator sesji).

Dzięki tej funkcji wszystkie dane sesji (nazwa + identyfikator) zostają zniszczone.

Zmienny pojemnik, który pozwolił ci odczytać/ustawić te dane, nadal istnieje, więc możesz operować na tych danych (np. Mogą być informacje podobne do ostatniej aktywności, a to jest wylogowanie i chcesz zachować ostatnią aktywność wiedzieć przy wylogowaniu się z niektórych dzienników lub bazy danych, więc dlaczego go usunąć? byłoby to nieproduktywne, ponieważ chcesz szybko zniszczyć (lub zatwierdzić) sesje, np. gdy wiesz, że dostęp tylko do odczytu jest potrzebny, przechowuj dane sesji pamięć, ale zatwierdz sesję już, ponieważ nie ma potrzeby jej otwierania).

Należy pamiętać, że nawet te zmienne są dostępne za pośrednictwem $_SESSION, nie są już częścią sesji. Być może to jest myląca część?

Przy okazji mój opis nie jest całkowicie poprawny. PHP wewnętrznie identyfikuje dane sesji według identyfikatora, aby można było zmienić nazwę sesji, a session_destroy() nadal usuwałoby dane sesji, ponieważ identyfikator sesji nie został zmieniony.

+0

Dziękuję za odpowiedź. Źle zrozumiałem opis. Zawieszałem dane sesji ze zmiennymi sesji. – PixelsTech

1

session_destroy() usuwa plik sesji, w którym przechowywane są dane sesji. Spójrz tutaj:

<?php 

session_save_path('./session/'); 

session_start(); 
$_SESSION['v'] = array('foo' => 123, 'bar' => 'spam'); 
$_SESSION['m'] = "rocky"; 

if(isset($_GET['delete']) == 'true') 
    session_destroy(); 

?> 

Mam skrypt whitch tworzy sesję i ustawić wartość v do 10 i zapisuje dane sesji w tej samej ścieżce skryptu w folderze o nazwie ./session.

Teraz otwórz stronę, a następnie przeglądaj katalog ./session, powinieneś zobaczyć plik o nazwie podobnej do sess_4r7ldo7s5hsctu3fgtvfmf4sd0. To jest, gdy dane sesji są przechowywane i to zawiera:

v|a:2:{s:3:"foo";i:123;s:3:"bar";s:4:"spam";}m|s:5:"rocky"; 

Aktywuj session_destroy() przekazując ?delete=true do strony, plik sesji zostaną po prostu usunięte.