Intereting Posts
Предупреждение: неверный аргумент, предоставленный foreach () в Структура Best DB (MySQL): статьи, содержащие предпочтительные теги Удалить строку из связанного объекта во многих отношениях во многих отношениях в Doctrine2 Как получить полезную нагрузку запроса Как включить расширение MySQLi в php 7? Используйте хранилище laravel с холстом изображения () Как сделать fputcsv «эхо» данными Учреждение doctrine2 не инициализировано При попытке отправить форму в текстовое поле введите прессу с jquery ajax не работает Интерфейс PHP-трансляции похож на Rosetta? Что такое перегрузка и переопределение функций в php? Symfony 2: как отправить электронное письмо с помощью Swiftmailer Невозможно настроить путь php.exe в pear.bat Переопределить общедоступный метод в подклассе таким образом, чтобы ограничивать доступ к общедоступным данным, сохраняя при этом доступ к родительскому классу? Создание XML-документа в PHP (escape-символы)

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

Я пытаюсь уничтожить всю переменную 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>