Codeigniter限制每天登录四次

时间:2017-09-11 07:11:45

标签: php codeigniter login

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;
    }

2 个答案:

答案 0 :(得分:1)

您应该在数据库(例如MySQL或Redis)中存储尝试次数(或记录,如果您喜欢),而不是会话数据。
因为如果用户清除了他们的浏览器cookie,会话就可以清除。

答案 1 :(得分:0)

使用userId(FK,int),attemptCount(int),lastAttempt(datetime)创建另一个表。

逻辑:

  1. 用户尝试登录
  2. 检查尝试表中是否存在用户ID。

    一个。如果是,请检查是否(currentTime - lastAttempt)> 24h)重置attemptCount否则尝试++。
    湾如果不是,请创建一个条目,设置attempt = 1。

  3. 最后检查tryCount> = 4,如果是,则向用户返回错误消息。