注销页面后防止后退按钮

时间:2012-04-04 17:52:36

标签: php mysql session redirect

我有php注销页面。用户单击注销链接时查看此页面并重定向到索引页面。但是当点击后退按钮时,我会看到包含用户数据的上一页。当然,当我刷新页面,我没有看到previouse页面和数据。我点击退出后检查了其他代码(drupal)并单击后退按钮我没有看到上一页页面并看到登录页面。我的问题在哪里怎么修这个?

注销页面:

if (isset($_GET['req']) && $_GET['req'] == 'logout') {
      session_start();
      session_destroy();
      header("Location: index.php");
   exit();
}

谢谢

7 个答案:

答案 0 :(得分:2)

代码是对的。实际上你不需要阻止人们点击后退按钮。如果您真的认为这很重要,您可以在logout.php中保存cookie或其他内容,主页检查是否已设置此cookie。如果它是你可以用JS重新加载页面(当然然后取消设置cookie)。但是不存在一种非常安全的方式。

答案 1 :(得分:2)

我认为这主要是客户端问题,并且由于浏览器缓存标头。

修复是什么?

在我看来,您需要正确设置静态内容和非静态内容的缓存标头

静态内容(css / javascript / images):read this

对于php页面本身:header("Cache-Control", "no-store, no-cache, must-revalidate");

应该做的伎俩

答案 2 :(得分:1)

您实际上是在询问如何清除用户的浏览器历史记录和他们有权访问的页面的缓存,但不再这样做。当您将用户注销时,您正在删除他们重新加载页面的能力,并且您可以做的很少(如果有的话)可以阻止浏览器向他们显示他们曾经允许加载的内容(这是陈旧的数据)。重要的是,当他们重新加载时,他们不会获得新数据 - 你无法擦除他们已经加载的缓存。

编辑:还想在阅读其他评论后添加内容:您可以告诉浏览器不要缓存任何数据,这将要求他们重新加载所有内容,即使他们按下后退按钮,但是你也要求他们重新加载所有东西,即使他们经过验证 - 这是你必须忍受的权衡。这显然取决于您网站的具体情况 - 但在大多数情况下,我认为这不值得进行权衡。您的托管将需要更多带宽,因为资源将在每次页面加载时重新下载,页面加载会更长,因为浏览器无法依赖其本地缓存,因此您的应用程序对用户来说自然会显得较慢。只要不是绝对必要的,除非他们主动登录,否则不会看到数据,我会找到一种礼貌且不引人注目的方式告诉用户注销并关闭浏览器窗口以减少窥探的可能性看到他们不应该看的数据。

答案 3 :(得分:0)

使用正在使用$_GET但未通过$_SESSION

验证任何内容

试试这个

session_start ();
if (isset ( $_GET ['req'] ) && $_GET ['req'] == 'logout') {
    $_SESSION ['auth'] = false ;
    session_destroy ();
}

if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) {
    header ( "Location: index.php" );
    exit ();
}

确保在您的主页中有类似的内容

session_start ();

if(/** login Condition **/)
{
    $_SESSION ['auth'] = true ;
}

if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) {
    header ( "Location: index.php" );
    exit ();
}

由于

:)

答案 4 :(得分:0)

这是一个简单快捷的解决方案。对于登录表单标记,添加target =“_ blank”,在另一个窗口中显示内容。然后在注销后关闭该窗口并解决后退按钮问题(Safari浏览器)。即使尝试使用历史记录也不会显示页面,而是重定向到登录页面。这适用于Safari浏览器,但对于Firefox等其他浏览器,session_destroy();照顾它。

答案 5 :(得分:0)

<?
session_start();
if(!isset($_SESSION['username']) && !isset($_SESSION['password'])){
header("Location:../index.php");
exit;
}
else{
session_destroy();
}
?>

将其粘贴到每个页面或您的注销位置

<?php
session_start();
session_unset();
session_destroy();
header("Location:../index.php");
exit;

user_logout.php

答案 6 :(得分:-3)

将此添加到您的代码中将阻止用户点击后退按钮。

     ignore_user_abort(true);