Я видел следующий вопрос и пытался адаптировать часть ответа, но не повезло: «Как я могу отключить кнопку« Назад »после того, как пользователь выйдет из системы и уничтожит сеанс?»
Я знаю, что эта тема много обсуждалась, и люди ненавидят фразу отключить кнопку «Назад». Но если у меня есть база данных с важной информацией об этом, как только пользователь выходит из системы, как я могу запретить кому-то из людей нажать кнопку назад и вернуться на предыдущую страницу.
Один ответ, если он видел, и ниже, может ответить на вопрос: Один из подходов, который я видел для намеренного нарушения использования кнопки «Назад», – это передать токен на каждый URL-адрес приложения и внутри каждой формы. Маркер регенерируется на каждой странице, и как только пользователь загружает новую страницу, токены с предыдущих страниц становятся недействительными. Когда пользователь загружает страницу, страница будет отображаться только в том случае, если к ней был передан правильный токен (который был предоставлен всем ссылкам / формам на предыдущей странице). Может ли кто-нибудь дать представление о том, как это сделать?
<?php session_start(); session_destroy(); $_SESSION = array(); header("location: login.php"); ?>
Куда должен идти заголовок?
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); <?php session_start(); //starts the session if($_SESSION['user']){ //checks if user is logged in } else{ header("location:login.php"); // redirects if user is not logged in } $username = $_SESSION['user']; //assigns user value $id_exists = false; ?>
У меня есть checklogin.php, который проверяет введенное имя пользователя и пароль, хранящиеся в базе данных MySQL. Затем они перенаправляются на файл file1.php. на этой странице есть кнопка выхода. Вышеприведенный код сохраняется на logout.php.
Когда пользователь выходит из системы, я не хочу, чтобы они снова обращались к файлу, нажав кнопку «Назад». благодаря
Что касается заголовков, вот те из веб-сервера, которые я регулярно использую после поиска:
Cache-Control: private, pre-check=0, post-check=0, max-age=0 Expires: 0 Pragma: no-cache
Нажатие кнопки «Назад» после нажатия ссылки на странице результатов отображает сообщение об ошибке в Firefox. Единственная заметная разница, которую я вижу, – Expire: 0
.
страница авторизации:
<?php if (isset($_POST['uname'], $_POST['pwd'], $_POST['type'])) { $Username = $_POST['uname']; $Password = $_POST['pwd']; $User_Type=$_POST['type']; if (!(empty($Username) || empty($Password) || empty($User_Type))) { $model = new UsersModel(); $rowsCount = $model->checkUser($Username,$Password,$User_Type); if ($rowsCount!=0) { $_SESSION['user'] = $Username; header("Location:LoginViewController.php"); } else { echo 'Bad user'; } } else { echo 'Please, fill all inputs'; } } else { echo 'Bad form sent'; } ?> <form name="f1" method="POST" action="" > // inputs </form>
LoginViewController.php:
<?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); if (!isset($_SESSION['user'])) { header('Location: login.php'); exit(); } echo 'You have successfully logged as '.$_SESSION['user'] ?>
И добавьте заголовки, чтобы заставить браузер повторить проверку страниц:
logout.php:
<?php session_start(); session_destroy(); $_SESSION = array(); header("location: login.php"); ?>