Сессия PHP не уничтожает после выхода пользователя из системы

Я пытаюсь создать механизм аутентификации для моего приложения PHP, и мне трудно справиться с этим сеансом. Я попытался отключить токен аутентификации, который ранее был установлен в массиве сеансов и уничтожал сеанс через

session_destroy ,

а также полностью сбросить массив сеансов, прежде чем уничтожить сеанс. Я вызываю функцию заголовка и возвращаюсь на страницу index.php в конце вызовов функций. Я тоже пробовал

session_write_close

для обработки закрытия сеанса. Когда я регистрирую пользователя, я делаю vardump сеанса, и он не показывает никаких данных, однако, когда я возвращаюсь на страницу index.php, я возвращаю данные аутентификации пользователя. Я также сделал vardump данных Post только для того, чтобы убедиться, что я не как-то повторно отправляю почтовый обработчик проверки подлинности.

Любые предложения о том, что делать здесь?

Во-первых, убедитесь, что вы вызываете session_start(); перед вызовом session_destroy(); потому что он выдаст предупреждение только в том случае, если вы этого не сделаете.

Кроме того, из PHP: session_destroy :

Чтобы вообще убить сеанс, как и для выхода из системы, идентификатор сеанса также должен быть отменен. Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса. Для этого может использоваться setcookie ().

Также стоит отметить PHP-сессии, session_unset() > session_destroy() ; Я не знаю почему. После прочтения записи PHP Manual в session_destroy() , похоже, только удаляются данные в текущем контексте, а не на самом деле очищаются от файла плоского сеанса, поэтому, если вы не очистили файл cookie, вы можете получить его обратно. Это кажется очень противоречивым (как часто PHP), и, возможно, именно поэтому я решил (а затем быстро забыл причину) несколько лет назад всегда использовать session_unset() session_destroy() .

Кроме того, убедитесь, что ваша переадресация происходит после того, как вы делаете всю эту бессмыслицу, так как PHP действует так, как не все разработчики ожидают. Best Practice, IMO, должна следить за каждым header('Location: ...'); позвонить со die;

Если вы используете только session_unset (), то в Bugy IE все еще хранятся данные, и я предлагаю использовать их оба.

Я бы проверил, что отправляет браузер на сервер с помощью Fiddler, а также проверяет, какая информация была сохранена в вашем сеансе. Save_path

Вы уверены, что страница не кэширована?

Запись через токен аутентификации:

 session_start(); $_SESSION['varName'] = null; $_SESSION = array(); session_destroy(); 

однако, когда я возвращаюсь на страницу index.php

Не запрашивается ли конкретная страница из кеша браузера? Сделайте жесткое обновление страницы ( CTRL+F5 в большинстве веб-браузеров).

Если это окажется причиной и вы хотите отключить кеширование запросов, добавьте следующий набор заголовков в HTML <head> свою страницу:

 <meta http-equiv="cache-control" content="no-cache,no-store,must-revalidate"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="expires" content="0"> 

или, в PHP-коде с использованием функции header() PHP:

 header('cache-control: no-cache,no-store,must-revalidate'); // HTTP 1.1. header('pragma: no-cache'); // HTTP 1.0. header('expires: 0'); // Proxies. 

Не забудьте очистить кеш браузера перед тестированием 🙂