用户注销并销毁会话后,如何禁用返回浏览器按钮?


How can I disable the back browser button after user press logout and destroy session?

我在session_destroy()上遇到了麻烦。

当用户按Log out它必须破坏会话。我写了下面的代码:

Logout.php

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

注销后,当我按浏览器返回按钮时,它显示我以前登录的用户页面和会话用户名在Login.php page

login。

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

我不知道为什么它是那样工作的。

请帮我找出我犯错误的地方。

我想在退出后禁用浏览器返回按钮

login.php page:

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

这是由于浏览器缓存在页面中保留详细信息,如果您刷新页面或在您的私人区域进一步移动,您将被提示登录页面,您将无法看到任何东西,假设您的登录检查系统配置正确。

你也可以强制浏览器不缓存这个页面,并为这个页面向服务器发出新的请求

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

您应该从注销脚本执行重定向。

例如:

header("Location: index.php");

如果用户下次点击,它将再次转到logout.php页面,在那里你可以再次执行检查并再次重定向:)如果用户再次尝试,这是一个无限循环

if (window.history) {
window.history.forward(1);
}
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

这是我的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");
   ?>

在除登录页和登录验证页以外的所有页面上尝试此代码。

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

这是我如何停止在Chrome备份:我使用这个函数:

function do_html_url($url) {
echo '
    <html>  
    <body>
      <script type="text/javascript">    
      window.location.replace("'; echo $url; echo '");  
      </script>
      <noscript>Sorry, your browser does not support JavaScript</noscript>
      </body>
      </html>';
return;
}

然后,在index.php(我的网站的第一页)我设置一个开关为0;在"之前"中页面测试开关是否为零,如果不是,通过调用上面的函数do_html_url("index.php")将控制权返回给index.php。在"之后"页面,将开关设置为1,将导致"before"页,拒绝备份到该页的尝试。

的例子:

  1. 在我的第一页(index.php): $_SESSION['needoffersw']=0;
  2. In my later "before"页面:如果($ _SESSION [' needoffersw '] ! = 0) {do_html_url("index.php";}
  3. 在我的"后"page: if ($_SESSION['needoffersw']!=0;