我将loginuserid存储在会话中并在注销时销毁会话。登录和注销工作正常,但我的问题是当用户注销时,我们按下后退按钮它仍然能够打开访问过的页面,甚至当他被执行时。
用户在刷新页面时转到登录页面。我希望用户即使按下后退按钮也不会去访问过的页面。请帮帮我。在此先感谢。
答案 0 :(得分:3)
这实际上是因为浏览器缓存 - 如果需要任何缓存,您应该禁用它并使用CodeIgniters Cache Library。
将以下内容添加到需要登录用户的页面中:
//Prevent browsers from using history to browse in the user system.
$this->CI->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->CI->output->set_header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$this->CI->output->set_header("Pragma: no-cache");
在浏览器中按回时,页面将被刷新,
答案 1 :(得分:2)
页面显示的原因是浏览器从缓存中引入它。要指示浏览器不应该从缓存中显示您的网页,您可以在应用的每个安全页面的no-cache
内添加<head>
元标记:
<meta http-equiv="Cache-Control" content="no-cache" />
如果您不想避免缓存,另一种选择(有点复杂)是让javascript向服务器发出AJAX调用,检查用户是否每次打开安全页面时都已登录。像这样:
$.getJSON('/user_logged_in.php', function(loggedIn) {
if(!loggedIn)
window.location.href = '/login.php';
});
user_logged_in.php
脚本应返回TRUE或FALSE。
希望这有帮助。
答案 2 :(得分:0)
有两个问题:
第一个问题是,即使您正在清除会话,该页面也会被存储的缓存访问。
因此您必须清除缓存或不保存缓存。 就在你的__construct函数中的代码下面。
$this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
$this->output->set_header('Cache-Control: post-check=0, pre-check=0',false);
$this->output->set_header('Pragma: no-cache');
执行此步骤后即使您要转到上一页,您在登录后重定向,那么
如果用户已登录,您可以查看该经过身份验证的页面。如果他未登录,则不会删除该页面。
示例:强>
public function after_log_in()
{
if(!empty($SESSION['username'] && $SESSION['os_logged_in'] == true))
{
$this->load->view('clienview');
}
else
{
echo "You are not logged in!";
}
}
因此,在您退出后按后退按钮时,它将检查用户是否已登录。如果您尚未登录,则会向您显示错误。