我正在学习代码点火器。用户登录后,当他点击注销按钮时,他会返回登录页面,但如果他点击浏览器返回按钮,他会再次返回连接页面。因此会话保留在浏览器中。如何重定向到登录页面。
代码
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class User extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->load->model('user_model');
}
public function index()
{
if($this->session->userdata('logged_in'))
{
$session_data = $this->session->userdata('logged_in');
$data['nom'] = $session_data['nom'];
redirect('user/connection_Ok');
}
else
{
//If no session, redirect to login page
$this->login;
}
}
public function logout()
{
$this->session->unset_userdata('logged_in');
// session_destroy();
$this->session->sess_destroy();
redirect('login');
}
当他点击注销按钮时,他会返回登录页面,但如果他点击浏览器返回按钮,他会再次返回连接页面。因此会话保留在浏览器中。
我觉得这里有些混乱。。。如果他单击"注销",则logout
控制器会破坏会话,周期为。使用浏览器的"后退"按钮无法撤消此操作或恢复会话。
换句话说,仅仅因为缓存的页面"看起来"他仍然登录,并不意味着他仍然登录。一旦他试图访问受限制的内容,他将不会被授权,因为他的上一个会话已经被破坏。
如何重定向到登录页面。
你无法阻止用户点击浏览器的"后退"按钮,也无法轻松控制他们点击时会发生什么。浏览器只需加载上一页的缓存版本,而无需重新加载……这就是浏览器的工作方式。
JavaScript可以让你访问浏览器历史记录,但没有完全可靠的方法来拦截"返回"按钮。无论解决方案多么全面或复杂,用户都可以简单地禁用JavaScript并击败它
然而,如果您编程了一个强大的授权系统,用户在未登录的情况下尝试访问受限内容时,将自动进入登录页面。
仅供参考-对于CodeIgniter,我建议您使用经过验证的授权系统,这样您就不必重新发明轮子或担心安全性。我喜欢Ben Edmund的Ion Auth,但CodeIgniter还有其他一些解决方案。。。只要做你的研究。
- 禁用浏览器缓存:将HTTP标头添加到受保护的页面
- 始终为要保护的页面启用安全http协议(https);否则,某些浏览器(Safari)可能不会禁用缓存
标题为:
Cache-Control: no-cache, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0
PS:HTML页面中不需要任何<meta cache-control>
标签;http标头优先。