В чем разница между session_unset () и session_destroy () в PHP? - PullRequest
83 голосов
/ 29 ноября 2010

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

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

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

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

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

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

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

Ответы [ 7 ]

134 голосов
/ 30 ноября 2010

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

$_SESSION = array();

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

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

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

16 голосов
/ 29 ноября 2010

session_destroy(); удаляет весь сеанс.

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

14 голосов
/ 01 июля 2011
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] is 1234.

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

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;
4 голосов
/ 10 декабря 2014

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

0 голосов
/ 07 марта 2018

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

0 голосов
/ 18 декабря 2017

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

0 голосов
/ 02 мая 2015

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

...