我目前正在学习使用codeigniter作为我的框架的MVC的基础知识,并且我创建了一个登录页面。现在我登录后已经重定向用户并存储会话数据,但问题出在我登录后(我在哪里重定向到另一个页面)然后按下后退按钮登录页面仍然显示,除非我突出显示地址中的URL栏和按下回车,我再次回到重定向页面。好吧,我知道这是因为我做过的会话检查,但我需要一个解决方案,我可以解决它,让用户不要再回到登录页面,除非他退出。对于已注销的用户,除非他/她再次登录,否则不会返回到某个页面。
要详细说明我想要发生的事情,就像在facebook登录中一样,在您登录并点击浏览器上的后退按钮后,Facebook仍然会将您重定向到您的主页而不是登录页面。退出同样的东西。
到目前为止,这是我的控制器,我认为这解释了一切。如果我在我的代码中做了一些裁员并且明白我是这方面的新手,请纠正我。 :)
public function index()
{
$data['error'] = null;
$username = $this->input->post('username');
$password = $this->input->post('password');
$data['login'] = $this->login_model->get_login_credentials($username,$password);
$data['session'] = $this->login_model->get_session($username);
//CHECK IF THE $PAGE VIEW IS EXISTING
if ( ! file_exists('application/views/pages/login.php'))
{
// IF PAGE DOESN'T EXISTS SHOW 404 ERROR
show_404();
}
if(($this->input->post('login')=='Login'&&$data['login']==1)||($username==$data['session']['username'])){
//SUCCESS LOGIN
$this->load->helper('url');
redirect('news');
}
if($this->input->post('login')=='Login'&&$data['login']!=1){
//LOGIN FAILED
$data['error'] = "Invalid login credentials.";
}
//FOR THE TITLE PART
$data['title'] = ucfirst('login');
$this->load->view('pages/login/login', $data);
$this->load->view('templates/footer', $data);
}
答案 0 :(得分:0)
首先检查您可以使用的会话数据:
$this->session->userdata('item');
这里
$username==$data['session']['username'])
也许你可以在索引的开头设置1检查:
if($this->session->userdata('username'))
redirect('news');
不要忘记在调用这些函数之前加载所需的所有助手和库。
对于会话,请检查http://codeigniter.com/user_guide/libraries/sessions.html
答案 1 :(得分:0)
如果您不想在成功登录后进入登录页面,则可以在登录页面中测试会话,并在设置session
时重定向到其他页面。试试这段代码。
if ($data['session']['username']) != NULL) {
redirect('home_page','refresh');
}
答案 2 :(得分:0)
这个问题在这里已经解决了:Hashem Qolami的Clear cache on back press to prevent going back on login page or previous page after logout同样的问题,但是从不同的角度来看。