Из документации php.net :
session_destroy - уничтожает все данные, зарегистрированные в сеансе
session_unset - Освобождает все переменные сеанса
Мой вопрос из трех частей:
Эти две функции кажутся очень похожими.
В чем на самом деле разница между ними?
Оба, похоже, удаляют все переменные, зарегистрированные в сеансе. Кто-нибудь из них действительно уничтожает сам сеанс? Если нет, то как это сделать (уничтожить сам сеанс).
Верно ли, что ни одна из двух функций не удаляет файл cookie сеанса на клиенте?
источник
local $_SESSION variable instance vs session data in the session storage
. Насколько я знаю, есть 1000 таких людей, как я, которые не поняли вашей точки зрения. Спасибоsession_destroy();
удаляет всю сессию.session_unset();
удаляет только переменные из сеанса - сеанс все еще существует. Обрезаются только данные.источник
Пример :
session_start(); session_destroy(); $a = "1234"; $_SESSION[a] = $a;
session_start(); session_unset(); $a = "1234"; $_SESSION[a] = $a;
Итак, я буду использовать:
session_start(); session_destroy(); session_start(); $a = "1234"; $_SESSION[a] = $a;
источник
session_unset();
вы ничего НЕ делаете, так как все еще можете использовать сеанс$_SESSION["a"]
, так что от него польза?$_SESSION[a]
должно быть$_SESSION['a']
и в отличие от того, что вы сказали, это НЕ NULL в вашем первом примере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_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_unset()
послеsession_destroy()
было бы бессмысленно. Используйтеsession_unset()
для удаления всех ключей и значений из суперглобального $ _SESSION или используйтеsession_destroy()
для удаления всего сеанса; не используйте и то, и другое только для того, чтобы «убедиться», доверьте функцию делать свою работу.session_destroy()
не сбрасывает суперглобальную переменную сессию до выхода с текущей страницы.