В чем разница между session unset() и session destroy() в PHP?
Из php.net документация:
Сессия_дестрой - Уничтожает все данные, зарегистрированные в сеансе
Session_унсет - Освободите все переменные сеанса
Мой вопрос из трех частей:
Эти две функции кажутся очень похожими.
В чем на самом деле разница между этими двумя?
Оба, похоже, удаляют все переменные, зарегистрированные в сеансе. Действительно ли кто-нибудь из них разрушает саму сессию? Если нет, как вы это делаете (уничтожаете саму сессию).
Правильно ли, что ни одна из двух функций не удаляет файл cookie сеанса на клиенте?
7 answers
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_unset($_SESSION['session_name'])
, думая, что это приведет только к отмене определенного или отдельного/отдельного имени сеанса. Но использование session_unset($_SESSION['session_name'])
приведет только к отмене всех имен сеансов. Правильный код для использования только unset($_SESSION['session_name'])
, если вы хотите отменить установку одного имени сеанса.
Я думаю, что session_destroy() и session_unset() следует использовать одновременно, чтобы убедиться, что данные сеанса наверняка удалены.