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

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

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

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

Мой трехчастный вопрос:

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

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

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

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_destroy() удалит сеанс после перемещения страницы, а session_unset() удалит сеанс при запуске кода.

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