0

我目前正在使用 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);

}
4

3 回答 3

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

于 2012-10-23T04:46:29.007 回答
0

如果您不想在成功登录后进入登录页面,您可以在登录页面中测试会话,如果session设置了则重定向到其他页面。试试这个代码。

if ($data['session']['username']) != NULL) {
    redirect('home_page','refresh');
}
于 2012-10-23T05:01:31.060 回答
0

这个问题已经在这里解决了:清除缓存后按以防止在Hashem Qolami注销后返回登录页面或上一页同样的问题,但角度不同。

于 2012-10-27T12:15:53.093 回答