注销后防止后退按钮

piy*_*ush 11 javascript php jquery

我不希望用户在注销后单击后退按钮返回到安全页面.在我的注销代码中,我取消了会话并重定向到登录页面.但是,我认为浏览器正在缓存页面,因此尽管会话从注销中被销毁,它仍然可见.

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

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

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

请建议一个更好的方法来实现这一目标.我觉得,必须有一种方法来处理这个由javascript客户端

Jon*_*ler 10

用PHP而不是javascript实现它.

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

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

正如您所提到的,在注销时,只需取消设置logged_in会话变量,然后销毁会话:

<?php
      unset($_SESSION['logged_in']);  
      session_destroy();  
?>
Run Code Online (Sandbox Code Playgroud)

如果用户现在单击后退,则没有logged_in会话变量可用,并且页面将不会加载.

  • 我已经实现了这种技术.但是回击按钮实际上并没有向服务器请求.而是从浏览器缓存渲染后页.因此它不会重定向到登录页面. (21认同)
  • 用户登录并查看一些敏感数据。然后他注销并离开计算机。其他人出现,按下后退按钮并可以访问敏感数据。那就是问题所在。 (2认同)

Tus*_*gar 5

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

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

$_SESSION['status']="Active";
Run Code Online (Sandbox Code Playgroud)

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

<?php

session_start();

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

?>
Run Code Online (Sandbox Code Playgroud)

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

大概注销代码应该如下:

{
    session_start();
    session_destroy();
    $_SESSION = array();
    header("location:login.php");
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...!!!