Как отключить кнопку заднего браузера после того, как пользователь выйдет из системы и уничтожит сеанс?

У меня возникают проблемы с session_destroy().
Когда Пользователь нажимает Log out, он должен уничтожить сеанс. Я написал следующий код:

Logout.php

<?php
    session_start();
    session_destroy();
    header("location: LoginViewController.php");
?>

После нажатия кнопки выхода из системы, когда я нажимаю кнопку "Назад в браузере", она показывает мою предыдущую пользовательскую страницу и имя пользователя сеанса на странице Login.php

login.php

<?php
    session_start();
    $_SESSION['user']=  $_GET['username'];
    echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'</div>"';
    echo '<a href="Logout.php" style="text-align:right">Logout</a>';

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");

    $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){
            header("location:login.php?username=".$_POST['uname']."");  
        } else {
            echo '<script type="text/javascript">alert("Enter username and password correctly");
            window.location.href="LoginViewController.php";</script>';
        }
    }

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

Я хочу отключить эту кнопку назад после выхода из системы.

Ответ 1

login.php страница:

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

Ответ 2

Вам нужно сделать переадресацию с вашего выхода script.

Например:

header("Location: index.php");

Вы, если пользователь в следующий раз ударит, снова перейдут на страницу logout.php, где вы снова можете выполнить проверку и перенаправить снова:) Это бесконечный цикл, если пользователь снова пытается выполнить.

Ответ 3

Это вызвано кешем браузера, который хранит данные на странице, если вы обновляете страницу или перемещаетесь дальше в своей частной области, вам будет предложено ввести страницу входа в систему, и вы не сможете ничего увидеть, предполагая что ваша система проверки входа правильно настроена.

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

header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

Ответ 4

Вот мой LoginController.php

  <?php

     header("Cache-Control: private, must-revalidate, max-age=0");
     header("Pragma: no-cache");
     header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

//Если вы отправляете форму, вставьте данные в базу данных

   $Username = $_POST['uname'];
    $Password = $_POST['pwd'];
    $User_Type=$_POST['type'];
    session_start();

   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:login.php");

    } else 
        {
        echo '<script type="text/javascript">alert("Enter username and password correctly");
        window.location.href="LoginViewController.php";</script>';
           }
        }

    }
     ?>

Вот моя страница входа в систему (login.php).. и отображает имя пользователя сеанса и выход из системы

    <?php

      header("Cache-Control: private, must-revalidate, max-age=0");
      header("Pragma: no-cache");
      header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

      session_start();
     if(!isset($_SESSION['user']))
     {
       header('Location: LoginViewController.php');
        exit();
       }
      echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'
       <a href="Logout.php" style="text-align:right">Logout</a></div>"';
        ?>

Вот мой Logout.php

   <?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
     session_start();
      session_destroy();
      header("Location: LoginViewController.php");
   ?>

Ответ 5

if (window.history) {
window.history.forward(1);
}

Ответ 6

header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

Ответ 7

Попробуйте этот код на всех страницах, кроме страницы входа и страницы проверки входа.

session_start();

if (!$_SESSION['sesuname']) {
    echo "You are not logged in.";
    exit();
} else {    
    /* All other codes must be here */
}