创建会话功能以保护控制器直接访问

时间:2014-04-07 11:55:32

标签: php codeigniter session

我已经使用我的代码注册了会话,并使用以下代码阻止了个人资料的直接访问。

public function profile() {
    if ($this->session->userdata('logged_in')) {
        //var_dump($this->session->userdata['logged_in']);
        $session_data = $this->session->userdata('logged_in');
        $data['nric_number'] = $session_data['nric_number'];

        $this->load->view('templates/header');
        $this->load->view('layouts/employee/profile', $data);
        $this->load->view('templates/footer');
    } else {
        //If no session, redirect to login page
        $base = base_url();
        redirect($base . 'checkinout', 'refresh');
    }
}

假设,我要阻止另一个名为allusers的控制器。因此,脚本将如下所示 -

public function allusers() {
    if ($this->session->userdata('logged_in')) {
        $this->load->view('layouts/employee/allusers');

    } else {
        //If no session, redirect to login page
        $base = base_url();
        redirect($base . 'checkinout', 'refresh');
    }
}

但是,我不想对每种方法使用以下条件。我可以跳过吗?

if($this->session->userdata('logged_in')) {
} else {
}

1 个答案:

答案 0 :(得分:2)

只需将代码放在类的构造函数中,这样就不需要在所有方法中检查会话了!

    if(!($this->session->userdata('logged_in'))) {
         $allowed = array(
             'method1',
             'method2'
         );

      if ( ! in_array($this->router->fetch_method(), $allowed) {
        redirect('login');
      }
    }