Codeigniter从模型输入简单认证系统的会话数据

时间:2012-09-08 15:36:04

标签: php oop codeigniter session

尝试整理简单的登录身份验证。已经有一段时间了,我找不到我错的地方。 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数组没有存储在会话中。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我猜你的登录功能是个问题:

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

这看起来不对......如果你的用户名是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;
}