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