0

试图组合一个简单的登录身份验证。已经有一段时间了,我找不到我要去哪里错了。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 数组没有存储在会话中。

4

2 回答 2

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);任何表。

于 2012-09-08T15:46:42.003 回答
0

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

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

这看起来不对...如果您的用户名是管理员,则需要有一个管理员表等...我发布了一个我最近编写的快速示例,似乎可以完成工作:

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;
}
于 2012-09-08T15:46:42.747 回答