Php 登录失败超过3次时阻止用户
我是Codeigniter的新手,我想创建一个登录,当用户登录失败超过3次时,可以阻止用户登录。 这是我的控制器 User.phpPhp 登录失败超过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
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来骚扰用户。