我在我的项目中使用 codeigniter,我有一个登录模块,我对每个模块进行身份验证。当会话不存在时,然后重定向到登录页面。所以,这可行,但有时它可能会在我登录然后刷新页面时发生,我被重定向到登录页面(意味着会话已经消失)。
请不要试图告诉我使用其他库,例如 php native 等。我只想知道导致这种情况的问题是什么。
function _admin_login()
{
    $this->form_validation->set_rules($this->login_rules);
    $data['title'] = "Login";
    $data['form_url'] = $this->uri->uri_string();   
    $data['login_btn'] = form_submit('login','Sign In','class="btn btn-large btn-block btn-primary"');
        if($this->form_validation->run($this) == FALSE){
            $data['user'] = form_input('username','','class="input-block-level input-large" placeholder="Username"');
            $data['passw'] = form_password('password','','class="input-block-level input-large" placeholder="Password"');
            $this->template->set('title','Login');
            $this->template->load('template_login','login_view',$data);
        }else{
            $username = $this->input->post('username',true);
            $row = $this->authentication_model->get_user_info($username);
            $this->session->set_userdata('user',$row['user_id']);
            $this->session->set_userdata('username',$row['username']);
            $this->session->set_userdata('login_state',true);
            $this->authentication_model->update_last_login();
                redirect('product');    
        }
}
这是我的登录脚本,如果验证通过,则设置会话......并且在每个控制器中我都检查了会话脚本。下面的例子:
$this->authentication_plugin->check_logged_in();
function check_logged_in()
    {
        if(logged_in() === FALSE){
            set_alert('Login in to view this page!!','error');
            set_bookmark('login_url');
            redirect("login");
        }
    }
function logged_in()
{
    $CI =& get_instance();
    $user = $CI->session->userdata('user');
    if(!$CI->load->library('session')){
            echo "no session is loaded";
            die;
    }
    if(!empty($user)){      
        return true;
    }else{  
        return false;
    }
}
有任何想法吗?谢谢!