2012-04-04 202 views
5

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

注销页面:

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

感谢

+0

你不能用PHP做到这一点,你需要用JS – Michal 2012-04-04 17:53:45

+3

的做到这一点'previous'页面仍然在浏览器的缓存中。如果您想要阻止对需要主动登录的页面执行“返回”操作,则必须使其无法访问。 – 2012-04-04 17:54:32

+0

使它们不可缓存不会阻止浏览器将它们存储在历史记录中... imo – Michal 2012-04-04 17:56:07

回答

2

的代码是正确的。其实你不需要阻止人们点击后退按钮。如果你真的认为这很重要,你可以在logout.php中保存一个cookie或其他东西,主页面会检查AJAX是否设置了这个cookie。如果是的话,你可以用JS重新加载页面(当然也可以不设置cookie)。但是一个非常安全的方式并不存在。

-3

将此添加到您的代码将阻止用户点击返回按钮。

 ignore_user_abort(true); 
+0

不,它不会......'ignore_user_abort()'设置客户端断开连接是否会导致脚本中止。 – Michal 2012-04-04 18:11:37

1

你实质上是问如何清除用户的浏览器历史记录和缓存他们有权访问的页面,但不再执行。当你登录一个用户时,你将消除他们重新加载页面的能力,并且你可以做的事情很少(如果有的话),可以防止浏览器向他们展示他们曾经允许加载的内容它是陈旧的数据)。重要的一点是,当他们重新加载时,他们不会获得新的数据 - 你无法擦除已经加载的缓存。

编辑:也想读其他人的意见后,补充一下:你可以告诉浏览器不缓存任何数据,这将要求他们重装所有的东西,即使他们按后退按钮,但你” d也要求他们重新加载所有的东西,即使他们通过认证 - 这是你必须忍受的折衷。这显然取决于你的网站的具体情况 - 但在大多数情况下,我认为这不值得进行折衷。您的主机需要更多带宽,因为资源会在每次页面加载时重新下载,页面加载时间会更长,因为浏览器无法依赖本地缓存,因此您的应用程序对用户来说自然会变得更慢。只要数据不是绝对必要的,除非他们正在积极登录,我只会发现一种礼貌而不引人注意的方式告诉用户注销并关闭浏览器窗口,以减少窥探的可能性眼睛看到他们不应该的数据。

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(); 
} 

感谢

:)

2

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

什么是修复?

在我看来,你需要设置静态内容和非静态内容缓存头正常

静态内容(CSS/JavaScript的/图片):read this

为PHP页面本身:header("Cache-Control", "no-store, no-cache, must-revalidate");

应该做的窍门

0

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

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