Authentication CodeIgniter:将更多信息存储到会话中

Authentication CodeIgniter:将更多信息存储到会话中,authentication,session,codeigniter,Authentication,Session,Codeigniter,这是我的登录控制器中的函数,它将数据存储到数组中,然后设置userdata function validate_credentials() { $this->load->model('membership_model'); $query = $this->membership_model->validate(); if($query): $data = array( 'username' => $this->in

这是我的登录控制器中的函数,它将数据存储到数组中,然后设置userdata

  function validate_credentials()
   {
   $this->load->model('membership_model');
   $query = $this->membership_model->validate();

   if($query):
    $data = array(
     'username' => $this->input->post('username'),
     //add usertype
     //add email
     //add deposit money
     'is_logged_in' => true
    );
    $this->session->set_userdata($data);
    //should redirect to last view
    redirect('home/index');
   else:
    $this->index();
   endif;
  }// end of validate_credentials()
我想储存更多的信息,如用户类型,电子邮件,仓库等。。。数据被存储到数据库中。如何将数据从模型获取到控制器?还是不建议这样做


例如,对于usertype,我想在视图中检查用户是否是管理员,并仅显示管理员的某些选项。

您可以使用在CI中完成的正常CI会话处理

$this->session->set_userdata('usertype', 'admin');
用于检查用户类型。我通常有一个身份验证类来检查登录的用户是否是管理员。e、 g

function logged_in($role = NULL)
{
    if ( ! $this->CI->session->userdata('logged_in'))
    {
        return FALSE;
    }

    if ($this->CI->user->has_role($role, $this->CI->session->userdata('user_id')))
    {
        return TRUE;
    }
    return FALSE;
} // function restrict()

关于保存信息,使用会话,它可能不是最安全的。我通常建议动态检查用户信息,而不是将所有信息都存储在CI会话中。

动态?您的意思是每次查询数据库,而不是将其存储到会话中。但是,如果您仍然可以让我知道如何将更多信息存储到会话中,那么会话是节省时间的。每次查询数据库,以便登录时用户类型已更改的用户可以在加载页面后立即工作。无论如何,要存储信息,只需使用$this->session->set_userdata('usertype','admin');然后您可以通过$this->session->userdata('usertype')读取它;