5

我有 php 注销页面。当用户单击注销链接时,请查看此页面并重定向到索引页面。但是当单击后退按钮时,我会看到带有用户数据的上一页。当然,当我刷新页面时,我看不到以前的页面和数据。单击注销并单击返回按钮后,我检查了其他代码( drupal ),我看不到上一个页面并看到登录页面。我的问题在哪里。如何解决这个问题?

登出页面:

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

谢谢

4

7 回答 7

2

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

解决方法是什么?

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

静态内容(css/javascript/images):阅读此内容

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

应该做的伎俩

于 2012-04-04T18:17:03.800 回答
2

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

于 2012-04-04T17:57:26.317 回答
1

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

编辑:还想在阅读其他评论后添加一些内容:您可以告诉浏览器不要缓存任何数据,这将要求他们重新加载所有内容,即使他们按下后退按钮,但您也需要他们重新加载所有内容即使它们经过身份验证 - 这是您必须忍受的权衡。这显然取决于您网站的特定情况——但在大多数情况下,我认为这不是一个值得的权衡。您的托管将需要更多带宽,因为每次页面加载时都会重新下载资源,页面加载时间会更长,因为浏览器不能依赖其本地缓存,因此您的应用程序自然会在用户看来更慢。只要不是绝对有必要不显示数据,除非他们主动登录,

于 2012-04-04T18:14:01.863 回答
0

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

于 2013-07-03T15:38:27.460 回答
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

于 2014-08-28T06:47:26.473 回答
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 ();
}

谢谢

:)

于 2012-04-04T18:16:22.037 回答
-3

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

     ignore_user_abort(true);
于 2012-04-04T18:09:42.473 回答