我在浏览器缓存中遇到了一个(显然是常见的)问题,并且可以通过“后退”按钮(在用户注销之后)访问我的安全页面。
这是我的logout.php
<?php
// 1. Find the session
session_start();
// 2. Unset all the session variables
$_SESSION = array();
// 3. Destroy the session cookie
if(isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// 4. Destroy the session
session_destroy();
redirect_to('index.php?logout=1');
?>
这样可以成功注销IE7,IE8,Chrome和Firefox上的用户,但是在Safari中,我可以按“后退”按钮(注销后立即),仍然可以看到安全内容。如果刷新安全页面,它将引导我进入登录屏幕(应如此)。
我试过使用:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
...但是没有效果。谁能提供任何建议?我在浏览器缓存中找到了this article,但是我还没有找到答案...尽管我确实找到了:
<?php
Header("Cache-Control: must-revalidate");
$offset = 60 * 60 * 24 * 3;
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
Header($ExpStr);
?>
...这也不能解决“问题”。唔。
最佳答案
如果可以使用HTTPS,则将其与Cache-control: no-cache
header 结合使用将禁用“页面缓存”(WebKit术语,用于内存/后向缓存)。不利的一面是,所有安全页面 View 都将禁用该功能,而不仅仅是注销后。 (Source;请注意,他们正在努力允许异常(exception),请注意这一点。)
如果可以依靠JavaScript,则附加unload
事件处理程序将防止出现“页面缓存”。这样的好处还在于,只有在附加了unload
事件处理程序之后,才允许您仅在单击“注销”按钮或链接时才断开缓存。 (Source)
这些解决方案都不是理想的,但是其中一个可能是值得的折衷方案。
关于php - 阻止后退按钮显示安全页面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4964407/