Подтвердить что ты не робот

Почему session_destroy() не работает

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

Почему session_destroy() не работает?

Есть ли другой способ уничтожить сеанс в PHP?

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) 
{   
    session_destroy();   
    session_unset();     
} 
4b9b3361

Ответ 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>