0

美好的一天我在创建登录尝试时遇到问题,如果用户输入错误的详细信息进行 5 次尝试,这将阻止现有帐户登录我有一个 ajax 和一个数据库

我尝试捕获值为 0 的尝试。然后每次失败它都会给出 + 1,但它不会添加超过一个,因为我认为 ajax 命令会再次刷新它,因此尝试仅接收 1 个循环。

登录部分正在工作,但我无法使尝试工作,如果尝试超过 5 15 分钟,你知道如何阻止用户我已经搜索了它的代码,但它最后一次使用是在 2007 年所以一些php无法读取代码

这是我的ajax代码:

在登录页面上,这里是 ajax 代码:

> <script type="text/javascript"> function validLogin(){
>       var uname=$('#uname').val();
>       var password=$('#password').val();    var attempts=0;
>     
>       var dataString = 'uname='+ uname + '&password='+ password;
>       $("#flash").show();
>       $("#flash").fadeIn(400).html('<img src="images/loading.gif" />');
>       $.ajax({
>       type: "POST",
>       url: "login_processed.php",
>       data: dataString,
>       cache: false,
>       success: function(result){
>                var result=trim(result);
>                $("#flash").hide();
>                if(result=='correct0'){
>                      window.location='user_home.php';
>                    }
>               else if(result=='correct1'){
>                      window.location='admin_home.php';
>                }else{
>                      $("#errorMessage").html(result);
>                            $attempts++;
>                }
>             
>       }
>       }); }   function trim(str){
>      var str=str.replace(/^\s+|\s+$/,'');
>      return str; } </script>

这是用于处理登录的 login_process.php 代码,它在其中捕获结果和错误。

> $message=array(); $attempts=0; if(isset($_POST['uname']) &&
> !empty($_POST['uname'])){
>     $uname=mysql_real_escape_string($_POST['uname']); }else{
>     $message[]='Please enter username'; }
> 
> if(isset($_POST['password']) && !empty($_POST['password'])){
>     $password=mysql_real_escape_string($_POST['password']); }else{
>     $message[]='Please enter password';    }
> 
> $countError=count($message);
> 
> if($countError > 0){
>           $attempts++;   echo $attempts;   for($i=0;$i<$countError;$i++){
>               echo ucwords($message[$i]).'</br>';
> 
>    }
> 
> }
> 
> 
> else{
>     $query="select * from user where uname='$uname' and BINARY password='$password'";
>   
>     $res=mysql_query($query);
>     $checkUser=mysql_num_rows($res);  $row = mysql_fetch_assoc($res);
>     if($checkUser > 0){
>          $_SESSION['LOGIN_STATUS']=true;
>          $_SESSION['UNAME']=$uname;
>          echo 'correct'.$row['type'];
>     }else{
>          echo ucwords('Incorrect Username or Password');
> 
>     } }

任何帮助将非常感激。你能教我登录尝试阻止用户吗,因为如果我阻止尝试错误的用户的 ip,它会广泛影响一个人登录的地方,例如电脑商店。:D 谢谢

4

1 回答 1

1

1.您应该创建一个名为尝试或类似名称的数据库表。然后从您已经在其中的用户表中输入您的用户 ID。

  1. 然后每次有人尝试登录时,代码都会检索当前尝试的次数并将其加 1,然后更新到表中。

  2. 然后编写一个语句,如果单个帐户的尝试次数大于 5,则会显示一条消息,告诉用户他们无法登录。

使用会话变量来设置超时和锁定功能。

像这样

 session_start();
 $attempts = "your MySQL result from the attempts table";
 if($attempts < 5){
  //normal login with error message
  $next_attempts = $attempts++;
  //code to write $new_attempts to attempts table
  //set the start of the lockout timer
  if($attempts == 4){
     $_SESSION('timeout') = time();
  }
}
//LOCKED OUT CODE
else{
    echo "sorry you have to wait 15 min to log in again";
    //Check elapsed time
    //10 minute timeout
    if ($_SESSION['timeout'] + 10 * 60 < time()) {
       $attempts = 0;
       //code to write $attempts to table attempts
       session_destroy()
    }
}
于 2013-08-12T17:07:12.860 回答