尝试组合一个简单的登录验证。我已经做了很长一段时间了,但我找不到哪里出了问题。对于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;
}