Как я могу не позволить пользователю вернуться после выхода на PHP?

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

Вот функция выхода:

//Start the Session session_start(); session_destroy(); header("location:login.php"); exit(); 

Я размещал следующий код на всех страницах, и это, похоже, не делает работу:

 header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past header ("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header ("Pragma: no-cache"); //Start the Session session_start(); 

Какие-либо предложения?

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

 print_r($_SESSION); 

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

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

Клиент может полностью игнорировать заголовки без кеша.

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

Скрипт входа (упрощенный)

 session_start() // register necessary session variables $_SESSION['username'] = $username; 

Сценарий выхода:

 session_start(); // destroy the session and check to make sure it has been destroyed session_destroy(); if(!session_is_registered('username')){ $loginMessage = 'You have been logged out.'; include 'index.php'; exit(); } // if we're still here, some bad juju happened 

Верх каждой страницы

 session_start() // make sure user is logged in if (!$_SESSION['username']) { $loginError = "You are not logged in."; include("index.php"); exit(); } в session_start() // make sure user is logged in if (!$_SESSION['username']) { $loginError = "You are not logged in."; include("index.php"); exit(); } 

Просто переадресуйте, если нет логина $ _SESSION, например:

 //on your protected pages session_start(); if(!$_SESSION['logged']) { header("location:login.php"); } 

Это мой выход:

 session_start(); // Unset all of the session variables. $_SESSION = array(); // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // Finally, destroy the session. session_destroy(); 

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

Большинство браузеров реализуют схемы кэширования по-разному.

Например, в Opera вы можете нажать «Назад», и он будет вытаскивать данные страницы непосредственно из памяти, не отправляя никаких данных на сервер, даже на странице истек. Если вы нажмете Refresh, конечно, ваш сервер потребует входа в систему.

В Internet Explorer он обрабатывается совсем по-другому, и данные формы повторно отправляются на сервер.

Это могут быть ваши функции session_destroy () . Попробуй это:

 unset($_SESSION); 

Отмена установки переменной $ _SESSION позволит удалить все, что хранится здесь.

Проверьте unset () на PHP.net

 $_SESSION['blah'] = ''; 

Это тоже работает.

 <? 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; 

и так же просто, как это при уничтожении вашей сессии