Я имею страницу выхода php. когда пользователь нажимает ссылку на выход. См. эту страницу и перенаправляйте на страницу индекса. но при нажатии кнопки «Назад» я вижу страницу previouse с пользовательскими данными. конечно, когда я обновляю страницу, я не вижу страницы и данные previouse. я проверил другой код (drupal) после выхода из системы и нажмите кнопку «Назад». Я не вижу страницу previouse и не вижу страницу входа в систему. Где моя проблема. как это исправить?
СОБЫТИЯ:
if (isset($_GET['req']) && $_GET['req'] == 'logout') { session_start(); session_destroy(); header("Location: index.php"); exit(); }
благодаря
Код правильный. На самом деле вам не нужно мешать людям щелкнуть по кнопке «Назад». Если вы действительно думаете, что это важно, вы можете сохранить файл cookie или что-то еще в logout.php, и главная страница проверяет с AJAX, установлен ли этот файл cookie. И если это, вы можете перезагрузить страницу с помощью JS (и, конечно же, отключить файл cookie). Но действительно безопасного пути не существует.
Я думаю, что это главным образом проблема с клиентской стороной и из-за заголовков кеша браузера.
что такое исправление?
На мой взгляд, вам нужно правильно установить заголовки кеша для статического содержимого и нестатического содержимого
Статическое содержимое (css / javascript / images): прочитайте это
Для самой страницы php: header("Cache-Control", "no-store, no-cache, must-revalidate");
должен сделать трюк
Вы, по сути, спрашиваете, как очистить историю браузера пользователя и кеш страницы, к которой они имели доступ, но больше не делают этого. Когда вы регистрируете пользователя, вы удаляете их возможность повторно загружать страницу, и очень мало (если что-либо) вы можете сделать, что может помешать браузеру показывать им то, что они когда-то позволяли загружать ( это устаревшие данные). Важная часть заключается в том, что при перезагрузке они не получают новых данных – вы не можете стереть кеш для того, что они уже загрузили.
Редактировать: также хотелось добавить что-то после прочтения других комментариев: вы можете сказать браузеру не кэшировать какие-либо данные, что потребовало бы, чтобы они перезагрузили ВСЕ, даже когда они нажимают кнопку «Назад», но вы также потребуете от них перезагружайте все, даже если они аутентифицированы – это компромисс, который вам придется смириться. Очевидно, это зависит от конкретной ситуации вашего сайта, но в большинстве случаев я не думаю, что это было бы выгодным компромиссом. Для вашего хостинга потребуется больше полосы пропускания, потому что ресурсы будут повторно загружены при каждой загрузке страницы, загрузка страниц будет больше, потому что браузеры не могут полагаться на свой локальный кеш, поэтому ваше приложение, естественно, будет выглядеть медленнее для пользователей. Пока не обязательно, чтобы данные не были видны, если они не вошли в систему, я бы просто нашел вежливый и ненавязчивый способ сообщить вашим пользователям выйти из системы и закрыть окно браузера, чтобы уменьшить вероятность подглядывания глаза, видящие данные, не должны.
Использование использует $_GET
но не проверяет что-либо форму $_SESSION
Попробуй это
session_start (); if (isset ( $_GET ['req'] ) && $_GET ['req'] == 'logout') { $_SESSION ['auth'] = false ; session_destroy (); } if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) { header ( "Location: index.php" ); exit (); }
Убедитесь, что на ваших основных страницах у вас есть что-то вроде этого
session_start (); if(/** login Condition **/) { $_SESSION ['auth'] = true ; } if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) { header ( "Location: index.php" ); exit (); }
благодаря
🙂
Вот одно простое и быстрое решение. В тег формы входа добавьте target = "_ blank", который отображает содержимое в другом окне. Затем после выхода из системы просто закройте это окно и проблема с кнопкой «Назад» (браузер Safari) будет решена. Даже попытка использовать историю не отображает страницу и вместо этого перенаправляется на страницу входа. Это нормально для браузеров Safari, но для других, таких как Firefox session_destroy (); заботится об этом.
<? session_start(); if(!isset($_SESSION['username']) && !isset($_SESSION['password'])){ header("Location:../index.php"); exit; } else{ session_destroy(); } ?>
вставьте это на каждую страницу или где выходите
<?php session_start(); session_unset(); session_destroy(); header("Location:../index.php"); exit;
user_logout.php
добавьте это в свой код, это не позволит пользователю нажать кнопку «Назад».
ignore_user_abort(true);