Php Codeigniter限制每天登录四次

Php Codeigniter限制每天登录四次,php,codeigniter,login,Php,Codeigniter,Login,大家好,我想限制每天登录四(4)次 我就是这样工作的 是否需要将登录尝试设置为userdata 有人已经这么做了吗 控制器 // database work $data = $this->login_model->validate_login($this->input->post('username'), $this->input->post('password')); 模型 您应该将尝试次数(或记录,如果您愿意)存储在数据库(例如MySQL或Red

大家好,我想限制每天登录四(4)次

我就是这样工作的

是否需要将登录尝试设置为userdata

有人已经这么做了吗

控制器

// database work
    $data = $this->login_model->validate_login($this->input->post('username'), $this->input->post('password'));
模型


您应该将尝试次数(或记录,如果您愿意)存储在数据库(例如MySQL或Redis)中,而不是存储在会话数据中。

因为如果用户清除了浏览器cookie,则会话可以被清除。

您应该将尝试次数(或记录,如果您愿意)存储在数据库(例如MySQL或Redis)中,而不是存储在会话数据中。

因为如果用户清除了他们的浏览器cookie,会话就可以被清除。

用userId(FK,int)、attemptCount(int)、lasttrunt(datetime)创建另一个表

逻辑是:

  • 用户尝试登录
  • 检查尝试表中是否存在用户id

    a。如果是,请检查(currentTime-LastAttenting)>24小时)是否重置attemptCount else尝试++。
    B如果否,则创建一个条目,将尝试设置为1

  • 最后检查attemptCount>=4,如果是,则向用户返回错误消息

  • 使用userId(FK,int)、attemptCount(int)、lasttrunt(datetime)创建另一个表

    逻辑是:

  • 用户尝试登录
  • 检查尝试表中是否存在用户id

    a。如果是,请检查(currentTime-LastAttenting)>24小时)是否重置attemptCount else尝试++。
    B如果否,则创建一个条目,将尝试设置为1

  • 最后检查attemptCount>=4,如果是,则向用户返回错误消息

  • 非常感谢。如果我有问题,我会尝试一下,然后再发一次。谢谢。如果我有问题,我会尝试一下,然后在这里再次发布
    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;
        }