我发现了这些问题,其中op与我的问题相同。
然而,我无法解决我的问题。用户按下注销按钮,然后页面被重定向到index.php,但浏览器中的后退按钮将页面重定向到以前的内容(受登录保护)。
刷新后,一切正常,后退按钮停止工作 - >用户被重定向到登录表单。
php文件
<?php
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache");
if(empty($_COOKIE['first_name'])) {
header("Location:index.php");
exit();
}
if(isset($_GET['logout'])) {
setcookie ("first_name", "", time() - 3600);
unset($_COOKIE);
header("Location:index.php");
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
</head>
<body>
<a href="?logout">logout</a>
</body>
</html>
答案 0 :(得分:1)
即使用户可以按后退按钮并查看上一页受登录保护,但并不意味着用户再次登录。他们无能为力 - 它只是他们以前浏览过的页面的静态副本。
用户可以按后退按钮并查看以前的页面是正常行为,并且站点不应尝试打破此操作。这是一个浏览器功能。
在大多数情况下,即使用户登录也允许后退按钮正常运行是安全的。在用户登录时断开后退按钮会对用户造成不良的可用性后果。为了防止用户在注销后返回页面,您必须确保他们在登录时查看的所有页面都无法使用后退按钮返回,这会打破整个会话的后退按钮。
您可以使用一些方法尝试禁用登录会话的后退按钮,例如通过声明页面不可缓存(和不可存储)。这些可能会或可能不会提供不同程度的防止后退按钮使用的保护。关于禁用后退按钮的stackoverflow还有很多其他问题 - 如果你想忽略建议并试图阻止它,请检查它。
答案 1 :(得分:0)
您可以尝试以下方法: 创建一个存储session_id的会话表。 当用户登录时,您在$ _SESSION中创建session_id并存储会话ID。您加载的每个页面,首先检查session_id是否在数据库中可用。如果没有,你去记录页面。否则你加载页面,在注销时你从数据库中删除session_id。
即使您可以使用后退按钮返回,也无法进行操作。你也可以使页面不可缓存