Codeigniter为一个简单的身份验证系统输入来自模型的会话数据


Codeigniter Inputting session data from model for a simple authentication system

尝试组合一个简单的登录验证。我已经做了很长一段时间了,但我找不到哪里出了问题。对于Codeigniter和OOP PHP来说,这是一个全新的概念。我知道有一些身份验证库,但我对使用它们不感兴趣。

型号:

 function login($username, $password){
    if ($this->db->table_exists($username)){
    $this->db->where('username', $username);
    $this->db->where('password', $password);
    $query = $this->db->get($username); 
        if($query->num_rows >= 1)
        {
        return true;
        $data = array(
            'username' => $this->input->post('username'),
            'login' => true
            );
            $this->session->set_userdata($data);
        } 
    }  
    }

控制器

function __construct(){
    parent::__construct();
    $this->logincheck();
}
public function logincheck(){
    if ($this->session->userdata('login')){
        redirect('/members');
        }
    }

如果我只是从控制器回显:$this->session->all_userdata();我得到一个空数组。因此,问题似乎是模型中的$data数组没有存储在会话中。

此代码是问题的一部分。您正在询问数据库驱动程序是否存在与用户名同名的表,并试图从同一个表中获取用户名和密码。

if ($this->db->table_exists($username)){
    $this->db->where('username', $username);
    $this->db->where('password', $password);
    $query = $this->db->get($username); 

$this->db->table_exists($username);$this->db->get($username);中的$username更改为用户所在的任何表。

我猜您的登录功能是问题所在:

if ($this->db->table_exists($username)){

这看起来不太对劲。。。如果你的用户名是admin,那么就需要一个admin表,等等……我发布了一个我最近写的快速示例,似乎可以完成任务:

public function doLogin(){
    $this->db->select('user_pass,user_id');
    $query = $this->db->get_where('users', array('user_name' => $this->input->post('login')));
    if($query->num_rows<1 || $query->row('user_pass')!=md5($this->input->post('password')))
        return false;
    $this->session->set_userdata(array('loggedin'=>true,'user_id'=>$query->row('user_id')));
    return true;
}