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

新手上路,请多包涵

我在使用 session_destroy() 时遇到问题。

当用户按下 注销时, 它必须销毁会话。我写了以下代码:

注销.php

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

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

登录.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>';

登录视图控制器.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>';
        }
    }

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

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

我想在注销后禁用该浏览器后退按钮。

原文由 Kvk Ganesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 284
2 个回答

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>

登录视图控制器.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']
?>

并添加标头以强制浏览器重新验证页面:

注销.php :

 <?php
session_start();
session_destroy();
$_SESSION = array();
header("location: login.php");
?>

原文由 Brewal 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

您可以强制浏览器不缓存该页面,并向服务器发出新的页面请求

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

原文由 Fabio 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题