Почему session_destroy() не работает
Я пытаюсь уничтожить всю переменную sesion с помощью метода session_destroy()
, но после использования метода значения не будут уничтожены.
Почему session_destroy()
не работает?
Есть ли другой способ уничтожить сеанс в PHP?
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800))
{
session_destroy();
session_unset();
}
Ответы
Ответ 1
После использования session_destroy()
сеанс уничтожается за кулисами. По какой-то причине это не влияет на значения в $_SESSION
, которые уже были заполнены для этого запроса, но в будущих запросах будет пустым.
Вы можете вручную очистить $_SESSION
, если хотите ($_SESSION = [];
).
Ответ 2
Возможно, слишком поздно реагировать, но убедитесь, что ваш сеанс инициализирован, прежде чем уничтожить его.
session_start() ;
session_destroy() ;
то есть. вы не можете уничтожить сеанс в logout.php, если вы инициализировали сеанс в index.php. Вы должны начать сеанс в logout.php, прежде чем уничтожить его.
Ответ 3
Если вам нужно очистить значения $_SESSION
, установите массив равным пустому массиву:
$_SESSION = array();
Конечно, вы не можете получить доступ к значениям $_SESSION
на другой странице после вызова session_destroy
, поэтому это не имеет значения.
Попробуйте следующее:
session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable
Ответ 4
Фактически, он работает, но вам также нужно выполнить $_SESSION = array();
после session_destroy, чтобы избавиться от переменных $_SESSION. Однако избегайте выполнения unset($_SESSION)
, потому что это делает сеансы бесполезными.
Ответ 5
session_destroy()
действует после завершения загрузки страницы. Таким образом, во второй загрузке сеанс завершается. Но с unset()
вы также можете выйти изнутри страницы.
Ответ 6
Ну, это кажется новой проблемой для меня, используя новый php-сервер. В прошлом никогда не было проблем с сессиями, которые не заканчиваются.
В тесте сеансов я настраиваю сеанс, запускаю счет сеанса ++ и закрываю сеанс. Перезагрузите страницу и, к моему удивлению, переменная осталась.
Я попробовал следующее предложение, отправленное mc10
session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable
Однако это не сработало. Я не думал, что это может сработать, поскольку сессия не была активной после уничтожения, поэтому я отменил ее.
$_SESSION = array();
session_destroy();
Это сработало, перезагрузив страницу sessios и просмотрев все установленные переменные, показало, что они пустые/не заданные.
Не уверен, почему session_destroy() не работает на этом сервере PHP версии 5.3.14.
Не важно, насколько я знаю, как очистить сеансы.
Ответ 7
Он работает, но иногда он не (проверьте приведенный ниже пример)
<?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
. [Кредиты Иво Перейра]
unset($_SESSION);
Ответ 8
Добавить 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>