我将 loginuserid 存储在会话中并在注销时销毁会话。登录和注销工作正常,但我的问题是当用户注销并且我们按下后退按钮时,它仍然能够打开访问过的页面,即使他实际上已经注销。
当我们刷新页面时,用户进入登录页面。我希望用户即使按下后退按钮也不要访问访问过的页面。请帮帮我。提前致谢 。
我将 loginuserid 存储在会话中并在注销时销毁会话。登录和注销工作正常,但我的问题是当用户注销并且我们按下后退按钮时,它仍然能够打开访问过的页面,即使他实际上已经注销。
当我们刷新页面时,用户进入登录页面。我希望用户即使按下后退按钮也不要访问访问过的页面。请帮帮我。提前致谢 。
这实际上是因为浏览器缓存 -如果需要任何缓存,您应该禁用它并使用CodeIgniters 缓存库。
在需要用户登录的页面中添加以下内容:
//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");
当在浏览器中按回时,页面将被刷新,
页面显示的原因是浏览器正在从缓存中获取它。要指示浏览器不应从缓存中显示您的页面,您可以在应用程序的每个安全页面中添加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。
希望这可以帮助。
有两个问题:
第一个问题是即使您正在清除会话,该页面也会被存储的缓存访问。
所以你必须清除缓存或不保存缓存。对于 __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!";
}
}
因此,注销后,当您按下返回按钮时,它将检查用户是否已登录。如果您没有登录,它将向您显示错误。