2017-09-11 8 views
0

こんにちは私は1日4回ログインにしたいと思っています。Codeignterログインを1日に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; 
    } 

答えて

1

あなたは(あなたが好きな場合またはレコード)の試みがないセッションデータに、データベース(例えばMySQLの、またはRedisの)でカウント保存する必要があります。
ユーザーがブラウザのCookieをクリアした場合、セッションをクリアすることができるためです。

0

userId(FK、int)、tryCount(int)、lastAttempt(datetime)で別のテーブルを作成します。

ロジック:

  1. ユーザーは、ユーザーIDが試みテーブルに存在する場合
  2. チェックにログインしようとします。

    a。はいの場合は、(currentTime-lastAttempt)> 24h)をリセットしてくださいtryCount else ++を試みます。
    b。いいえの場合は、試行= 1を設定してください。

  3. 最後に、試行回数が4回以上であるかどうかを確認します。
+0

ありがとうございます。私はそれを試し、私は問題がある場合はここに再度投稿します –

関連する問題