Hello Guys我想限制每天登录四(4)。
我这样工作。
我是否需要为userdata设置登录尝试?
任何人都已经这样做了吗?
控制器
// database work
$data = $this->login_model->validate_login($this->input->post('username'), $this->input->post('password'));
模型
public function validate_login($username, $password) {
$this->load->helper('password');
$this->db->select('user_id, username, password, date_registered, active, login_attempts');
$this->db->from('users');
$this->db->where('username', $username);
$this->db->limit(1);
$query = $this->db->get();
if($query->num_rows() == 1) {
$row = $query->row();
if (hash_password($password) == $row->password) {
$array['user_id'] = $row->user_id;
$array['username'] = $row->username;
$array['date_registered'] = $row->date_registered;
$array['active'] = $row->active;
return $array;
}
}
// login attempts +1 because login failed
$this->_increase_login_attempts($username);
return (1 + (isset($row) ? $row->login_attempts : 0));
}
private function _increase_login_attempts($username) {
$this->db->set('login_attempts', 'login_attempts + 1', FALSE);
$this->db->where('username', $username);
$this->db->update('users');
if ($this->db->affected_rows() == 1) {
return true;
}
return false;
}
答案 0 :(得分:1)
您应该在数据库(例如MySQL或Redis)中存储尝试次数(或记录,如果您喜欢),而不是会话数据。
因为如果用户清除了他们的浏览器cookie,会话就可以清除。
答案 1 :(得分:0)
使用userId(FK,int),attemptCount(int),lastAttempt(datetime)创建另一个表。
逻辑:
检查尝试表中是否存在用户ID。
一个。如果是,请检查是否(currentTime - lastAttempt)> 24h)重置attemptCount否则尝试++。
湾如果不是,请创建一个条目,设置attempt = 1。