Я пытаюсь уничтожить всю переменную sesion с помощью метода session_destroy()
, но после использования метода значения не будут уничтожены.
Почему session_destroy()
не работает?
Есть ли другой способ уничтожить сеанс в PHP?
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { session_destroy(); session_unset(); }
После использования session_destroy()
сеанс уничтожается за кулисами. По какой-то причине это не влияет на значения в $_SESSION
, которые уже были заполнены для этого запроса, но в будущих запросах он будет пустым.
Вы можете вручную очистить $_SESSION
если хотите, ( $_SESSION = [];
).
Возможно, слишком поздно реагировать, но убедитесь, что ваша сессия инициализирована, прежде чем уничтожить ее.
session_start() ; session_destroy() ;
т.е. вы не можете уничтожить сеанс в logout.php, если вы инициализировали сеанс в index.php. Вы должны начать сеанс в logout.php, прежде чем уничтожить его.
Если вам нужно очистить значения $_SESSION
, установите массив равным пустому массиву:
$_SESSION = array();
Конечно, вы не можете получить доступ к значениям $_SESSION
на другой странице после вызова session_destroy
, так что это не имеет большого значения.
Попробуйте следующее:
session_destroy(); $_SESSION = array(); // Clears the $_SESSION variable
На самом деле, он работает, но вам также нужно сделать $_SESSION = array();
после session_destroy, чтобы избавиться от переменных $ _SESSION. Однако избегайте делать unset($_SESSION)
потому что это делает сеансы бесполезными.
session_destroy()
действует после завершения загрузки страницы. Таким образом, во второй загрузке сеанс завершается. Но с unset()
вы также можете выйти изнутри страницы.
Ну, это кажется новой проблемой для меня, используя новый php-сервер. В прошлом никогда не было проблем с сессиями, не заканчивающимися.
В тесте сеансов я настраиваю сеанс, запускаю сессионный счет ++ и закрываю сеанс. Перезагрузите страницу и, к моему удивлению, переменная осталась.
Я попробовал следующее предложение, отправленное mc10
session_destroy(); $_SESSION = array(); // Clears the $_SESSION variable
Однако это не сработало. Я не думал, что это может сработать, поскольку сессия не была активной после уничтожения, поэтому я отменил ее.
$_SESSION = array(); session_destroy();
Это сработало, перезагрузив страницу sessios и просмотрев множество переменных, все показали, что они пусты / не заданы.
На самом деле не уверен, почему session_destroy () не работает на этом сервере PHP версии 5.3.14.
Мне все равно, пока я знаю, как очистить сеансы.
Он работает, но иногда это не так (проверьте приведенный ниже пример)
<?php session_start(); $_SESSION['name']="shankar"; if(isset($_SESSION['name'])) { echo $_SESSION['name']; // Outputs shankar } session_destroy(); echo $_SESSION['name']; // Still outputs shankar
Weird !! Правильно ?
В приведенном выше сценарии, если вы замените session_destroy();
с unset($_SESSION['name']);
он работает так, как ожидалось.
Но я хочу уничтожить все переменные, а не только одну!
Да, есть и исправление. Просто $_SESSION
массив $_SESSION
. [ Кредиты Иво Перейра ]
unset($_SESSION);
Добавить session_start (); до! Объявление Doctype
<?php session_start(); ?> <!doctype html> <html> <body> <?php if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { session_destroy(); session_unset(); } ?> </body> </html>