我在我的网站上创建了登录功能,当我点击退出时,页面会重定向并销毁会话,这很好。
然而,当我点击后退按钮时,我仍然可以查看该页面。如果我刷新它,那么它将重定向我登录,因为会话已被销毁,并且用户无法像预期那样访问该页面。
有没有办法阻止用户点击后退按钮时能够查看该页面?
答案 0 :(得分:4)
它可能只是显示缓存的结果。
将echo time();
放入页面的某个位置,然后如果您在点击后退按钮时查看相同的时间字符串,则只是您的浏览器缓存页面,在这种情况下它是无害的(他们只会查看他们之前已经访问过的信息,无论如何他们都可以保存为下载的页面,因此无需担心)。
答案 1 :(得分:2)
session_destroy()仅在重新加载页面或重定向到另一个页面时清空变量。如果用户返回同一页面,则在session_destroy()之后变量仍然可用。
我建议也取消设置应该解决问题的每个变量。 例: 未设置($ _ SESSION [ '无论'])
因此,在您的注销功能首先取消设置每个变量时,销毁会话然后重新路由到另一个页面。
答案 2 :(得分:1)
尝试执行
header( 'Location: http://mySerbver.com/anURL' );
在你破坏了会话之后。这使得返回上一页至少有点复杂。要返回,用户必须再次单击两次。
如果您想让它变得更复杂,请执行
标题('位置:http://mySerbver.com/myScript.php?onceMore=yes');
如果myScript.php找到
isset( $_GET[ 'onceMore' ] )
然后执行
header( 'Location: http://mySerbver.com/myScript.php' );
再次。
myScript.php:
<?php
// Force the browser to redirect once again
if ( isset( $_GET[ 'onceMore' ] ) {
header( 'Location: http://mySerbver.com/myScript.php' );
}
// else continue with normal stuff.
...
此外,指示浏览器不缓存页面可能会有所帮助:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // date in past
请注意,该浏览器可能会也可能不会尊重此标题。因此,您可能需要发送更多与缓存相关的标头。
答案 3 :(得分:1)
您可以使用header()
解决此问题。我使用以下代码进行注销:
session_start();
unset($_SESSION['logged_usr_id']);
unset($_SESSION['logged_f_name']);
unset($_SESSION['logged_l_name']);
unset($_SESSION['logged_email']);
unset($_SESSION['fname']);
unset($_SESSION['lname']);
unset($_SESSION['email_v']);
unset($_SESSION['email_cnf_v']);
unset($_SESSION['pass_v']);
unset($_SESSION['pass_cnf_v']);
session_destroy();
//i try to kill again sesion :D
foreach($_SESSION as $type => $value) {
unset($type);
}
header( 'Location: index.php' );