В чем разница между session_unset() и session_destroy() в PHP?

Из документации http://php.net/:

session_destroy - уничтожает все данные, зарегистрированные в сеансе

session_unset - освобождает все переменные сессии

Мой вопрос из трех частей:

Две функции кажутся очень похожими.
В чем разница между этими двумя?

Кажется, что оба удаляют все переменные, зарегистрированные в сеансе. Кто-нибудь из них на самом деле уничтожает сам сеанс? Если нет, как вы этого достигнете (уничтожить саму сессию).

Правильно ли, что ни одна из двух функций не удаляет cookie сеанса на клиенте?

7 ответов

Решение

session_unset просто очищает $_SESSION переменная. Это эквивалентно выполнению:

$_SESSION = array();

Так что это влияет только на местный $_SESSION экземпляр переменной, но не данные сеанса в хранилище сеанса.

В отличие от этого, session_destroy уничтожает данные сеанса, которые хранятся в хранилище сеанса (например, файл сеанса в файловой системе).

Все остальное остается неизменным.

session_destroy(); удаляет всю сессию.

session_unset(); удаляет только переменные из сессии - сессия все еще существует. Только данные усекаются.

session_unset();

Просто очистите все данные всей переменной сессии.


session_destroy();

Удалить всю сессию.


Пример:

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

$_SESSION[a] является NULL,


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

$_SESSION[a] является 1234,


Итак, я буду использовать:

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

session_unset() очистит $_SESSION переменная (как в array()), но это не коснется файла сеанса. Но когда сценарий заканчивается; состояние $_SESSION будет записан в файл. Затем он очистит файл, но не удалит его. Когда вы используете session_destroy() это не коснется $_SESSION (Использование var_dump($_SESSION) после session_destroy()), но удалит файл сеанса, поэтому при выходе из сценария не будет файла для записи состояния $_SESSION,

Я пытался использовать session_unset($_SESSION['session_name']) думая, что это будет только сбрасывать конкретное или индивидуальное / одно имя сеанса. Но используя session_unset($_SESSION['session_name']) будет только сбрасывать все имена сессий. Правильный код для использования только unset($_SESSION['session_name']) если вы хотите сбросить одно имя сеанса.

Session _start(); # он создаст виртуальный массив (ассоциативный) в памяти браузера в реальном времени

добавлено два предмета

> $_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()

тестовый блок 1, 2 или 3 по отдельности, закомментировав другие

session_destroy() удалит сеанс после перемещения страницы иsession_unset() удалит сессию при запуске кода.

Я думаю, что session_destroy() и session_unset() должны использоваться одновременно, чтобы убедиться, что данные сессии обязательно удалены.

Другие вопросы по тегам