Почему PHP session_destroy () не работает? - PullRequest
35 голосов
/ 24 июня 2011

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

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

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

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

Ответы [ 8 ]

90 голосов
/ 30 мая 2012

Возможно, уже слишком поздно, чтобы ответить, но убедитесь, что ваш сеанс инициализирован, прежде чем уничтожить его.

session_start() ;
session_destroy() ;

т.е. вы не можете уничтожить сеанс в logout.php, если вы инициализировали сеанс в index.php. Вы должны начать сеанс в logout.php, прежде чем уничтожать его.

47 голосов
/ 24 июня 2011

После использования session_destroy() сеанс уничтожается за кулисами. По какой-то причине это не влияет на значения в $_SESSION, который уже был заполнен для этого запроса, но он будет пустым в будущих запросах.

Вы можете вручную очистить $_SESSION, если хотите ($_SESSION = [];).

15 голосов
/ 24 июня 2011

Если вам нужно очистить значения $_SESSION, установите массив равным пустому массиву:

$_SESSION = array();

Конечно, вы не можете получить доступ к значениям $_SESSION на другой страницекак только вы позвоните session_destroy, так что это не имеет большого значения.

Попробуйте следующее:

session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable
4 голосов
/ 24 июня 2011

На самом деле, это работает, но вам также нужно сделать $_SESSION = array(); после session_destroy, чтобы избавиться от переменных $ _SESSION.Однако избегайте unset($_SESSION), потому что это делает сессии бесполезными.

1 голос
/ 23 декабря 2016

session_destroy() действует после завершения загрузки страницы.Таким образом, во второй загрузке сеанс прекращается.Но с помощью unset() вы также можете выйти из системы на странице.

1 голос
/ 19 февраля 2013

Ну, это кажется новой проблемой для меня, используя новый сервер php. В прошлом никогда не было проблем с сеансами, не заканчивающимися.

В тесте сеансов я настроил сеанс, запустил счетчик сеансов ++ и закрыл сеанс. Перезагрузил страницу и, к моему удивлению, переменная осталась.

Я попробовал следующее предложение от mc10

session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable

Однако это не сработало. Я не думал, что это может сработать, так как сессия не была активной после его уничтожения, поэтому я перевернул ее.

$_SESSION = array();
session_destroy();

Это сработало, перезагрузив страницу, запустив sessios и просмотрев заданные переменные - все показало их пустыми / не заданными.

На самом деле не уверен, почему session_destroy () не работает на этом сервере PHP версии 5.3.14.

Мне все равно, если я знаю, как очистить сессии.

0 голосов
/ 28 января 2015

Добавить session_start ();до! Doctype декларация

0 голосов
/ 24 октября 2013

Это работает, но иногда это не (проверьте пример ниже)

<?php
session_start();
$_SESSION['name']="shankar";
if(isset($_SESSION['name']))
{
    echo $_SESSION['name']; // Outputs shankar
}
session_destroy();
echo $_SESSION['name']; // Still outputs shankar

Странно !!Правильно?


Как это преодолеть?

В приведенном выше сценарии, если вы замените session_destroy(); на unset($_SESSION['name']); работает как положено.

Но я хочу уничтожить все переменные, а не только одну!

Да, это тоже можно исправить.Просто сбросьте массив $_SESSION.[ Кредиты Иво Перейра ]

unset($_SESSION);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...