注销后阻止后退按钮

2022-08-30 22:18:43

我不希望用户在注销后通过单击后退按钮返回受保护的页面。在我的注销代码中,我正在取消设置会话并重定向到登录页面。但是,我认为浏览器正在缓存页面,因此即使会话从注销中销毁,它也会变得可见。

我能够通过不允许浏览器缓存来避免这种情况

header("Cache-Control", "no-cache, no-store, must-revalidate")

但是这样我就失去了浏览器缓存的优势。

请建议一个更好的方法来实现这一目标。我觉得,一定有一种方法可以通过javascript客户端来处理这个问题。


答案 1

在PHP而不是javascript中实现它。

在每个页面的顶部,检查用户是否已登录。如果没有,则应将其重定向到登录页面:

<?php 
      if(!isset($_SESSION['logged_in'])) : 
      header("Location: login.php");  
?>

如前所述,在注销时,只需取消设置logged_in会话变量,然后销毁会话:

<?php
      unset($_SESSION['logged_in']);  
      session_destroy();  
?>

如果用户现在单击返回,则不会logged_in会话变量可用,并且页面将不会加载。


答案 2

我遇到了同样的问题,花了一整天的时间弄清楚它,最后纠正如下:

在登录验证脚本中,如果用户已通过身份验证,请为例如设置一个会话值,如下所示:

$_SESSION['status']="Active";

然后在用户配置文件脚本中放置以下代码片段:

<?php

session_start();

if($_SESSION['status']!="Active")
{
    header("location:login.php");
}

?>

上面的代码所做的是,只有并且仅当设置为则只有它才会转到 用户配置文件 ,并且此会话密钥将设置为仅当用户经过身份验证时...[注意否定 [' !上面的代码片段中的 ']$_SESSION['status']"Active""Active"

可能注销代码应如下所示:

{
    session_start();
    session_destroy();
    $_SESSION = array();
    header("location:login.php");
}

希望这有助于...!!!