Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 登录失败超过3次时阻止用户_Php_Codeigniter_Authentication_Session - Fatal编程技术网

Php 登录失败超过3次时阻止用户

Php 登录失败超过3次时阻止用户,php,codeigniter,authentication,session,Php,Codeigniter,Authentication,Session,我是Codeigniter的新手,我想创建一个登录,当用户登录失败超过3次时,可以阻止用户登录。 这是我的控制器 User.php public function login_proses() { $this->form_validation->set_rules('email', 'E-mail', 'trim|required|min_length[3]|max_length[45]'); $this->form_validation->set_rules

我是Codeigniter的新手,我想创建一个登录,当用户登录失败超过3次时,可以阻止用户登录。 这是我的控制器

User.php

 public function login_proses() {

  $this->form_validation->set_rules('email', 'E-mail', 'trim|required|min_length[3]|max_length[45]');
  $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[5]|max_length[12]');

if ($this->form_validation->run() == TRUE) {

      if($this->m_user->m_cek_mail()->num_rows()==1) {

        $db=$this->m_user->m_cek_mail()->row();
        if(hash_verified($this->input->post('password'),$db->password)) {

                $data_login=array('is_login'=>TRUE,
                        'email'  =>$db->email,
                        'nama'   =>$db->nama);

                $this->session->set_userdata($data_login);
                redirect('user/dashboard','refresh');

                    } else {

                    $this->session->set_flashdata('pesan', 'Login gagal: password salah!');
                    redirect('/','refresh');
                    }

      } else { // jika email tidak terdaftar!

      $this->session->set_flashdata('pesan', 'Login gagal: email salah!');
      redirect('/','refresh');

      }

} else { 

    $this->load->view('user/form_login');
}

 }
<div class="login">
<h4 style="text-align: center;">Login To Your Start</h4>
<p style="color: red; text-align: center;"><?php echo $this->session->flashdata('pesan'); ?></p>
<form action="<?php echo base_url(); ?>user/login_proses"  method="post">
  <label>email or username</label>
  <input type="email" name="email"class="form-control" id="exampleInputEmail1">
  <label>password</label>
  <input type="password" name="password" class="form-control"><br>
  <button type="submit" value="Login" class="btnSubmit">Login</button>
</form>
这是视图中的登录表单

form_login.php

 public function login_proses() {

  $this->form_validation->set_rules('email', 'E-mail', 'trim|required|min_length[3]|max_length[45]');
  $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[5]|max_length[12]');

if ($this->form_validation->run() == TRUE) {

      if($this->m_user->m_cek_mail()->num_rows()==1) {

        $db=$this->m_user->m_cek_mail()->row();
        if(hash_verified($this->input->post('password'),$db->password)) {

                $data_login=array('is_login'=>TRUE,
                        'email'  =>$db->email,
                        'nama'   =>$db->nama);

                $this->session->set_userdata($data_login);
                redirect('user/dashboard','refresh');

                    } else {

                    $this->session->set_flashdata('pesan', 'Login gagal: password salah!');
                    redirect('/','refresh');
                    }

      } else { // jika email tidak terdaftar!

      $this->session->set_flashdata('pesan', 'Login gagal: email salah!');
      redirect('/','refresh');

      }

} else { 

    $this->load->view('user/form_login');
}

 }
<div class="login">
<h4 style="text-align: center;">Login To Your Start</h4>
<p style="color: red; text-align: center;"><?php echo $this->session->flashdata('pesan'); ?></p>
<form action="<?php echo base_url(); ?>user/login_proses"  method="post">
  <label>email or username</label>
  <input type="email" name="email"class="form-control" id="exampleInputEmail1">
  <label>password</label>
  <input type="password" name="password" class="form-control"><br>
  <button type="submit" value="Login" class="btnSubmit">Login</button>
</form>

登录到您的开始


在我看来,最好的方法是通过在SQL数据库中创建一个新表来跟踪特定电子邮件或IP登录的尝试次数。当总尝试次数超过3次时,您会告诉他们已被阻止多次尝试。也。请确保为其添加时间戳,以便允许他们稍后重试。能否给我一个代码示例或某个网页以供参考不像Niels建议的那样,您不需要为此单独的表,只需向usertable添加一个默认值为0的新列(tinyint或smallint)。每次登录尝试时,如果该值已为3,则检查该值,如果已为3,则拒绝登录。如果不是,并且登录凭据无效,则增加此值。如果登录凭据有效,请将此值重置为0;你必须先自己建立逻辑。如果您熟悉PHP,这应该不会那么困难。当登录失败时,您可以在新表中插入新行,其中包含用户的IP或电子邮件地址以及时间戳等内容,日期等。当在一定时间内有超过3行匹配IP或电子邮件地址时,您将拒绝用户任何更多的登录尝试。CodyKL建议的是一个选项,但他的解决方案的问题是,如果黑客拥有大量被盗凭据,您将无法阻止他们尝试一百万次。如果用户数据库中存在该用户,则只会拒绝它们3次。你可能会阻止一个甚至没有造成封锁的合法用户。我的解决方案要么同时基于电子邮件地址和IP,要么在尝试次数过多时使用Google recaptcha来骚扰用户。在我看来,最好的方法是通过在SQL数据库中创建一个新表来跟踪特定电子邮件或IP登录的尝试次数。当总尝试次数超过3次时,您会告诉他们已被阻止多次尝试。也。请确保为其添加时间戳,以便允许他们稍后重试。能否给我一个代码示例或某个网页以供参考不像Niels建议的那样,您不需要为此单独的表,只需向usertable添加一个默认值为0的新列(tinyint或smallint)。每次登录尝试时,如果该值已为3,则检查该值,如果已为3,则拒绝登录。如果不是,并且登录凭据无效,则增加此值。如果登录凭据有效,请将此值重置为0;你必须先自己建立逻辑。如果您熟悉PHP,这应该不会那么困难。当登录失败时,您可以在新表中插入新行,其中包含用户的IP或电子邮件地址以及时间戳等内容,日期等。当在一定时间内有超过3行匹配IP或电子邮件地址时,您将拒绝用户任何更多的登录尝试。CodyKL建议的是一个选项,但他的解决方案的问题是,如果黑客拥有大量被盗凭据,您将无法阻止他们尝试一百万次。如果用户数据库中存在该用户,则只会拒绝它们3次。你可能会阻止一个甚至没有造成封锁的合法用户。我的解决方案要么同时基于电子邮件地址和IP地址,要么在用户尝试过多时使用Google recaptcha来骚扰用户。