您的位置:首页 > 其它

登录安全性 一天内连续输入密码错误3次,第二天才能登录(过了当天凌晨24点),实现原理

2017-01-07 11:04 465 查看
[php]
view plain
copy





登录安全性 一天内连续输入密码错误3次,第二天才能登录(过了当天凌晨24点)  
  
下面我们先在数据库中建立一个试验表,id,用户名username,密码pwd,次数num,时间time(date);  
  
这个功能主要在数据库中分3中情况判断  
  
1:解锁时间到了,清除数据库以前的记录数,次数值还原0  
  
2:在解锁时间内,但是不良记录已经达到3次,不能登  
  
3:在解锁时间内,并且不良记录未满3次,可以登录;  
  
前面登录表单直接跳转至下方法:  
  
  
 public function 方法(){  
  $admin=$_POST['username'];  
  $password=$_POST['pwd'];  
  
  //接收值  
  //echo $admin,$password;  
  $model=M('表名');  
  $info=$model->where("username='$admin'")->find();  
  if($info){  
   //获取当前时间  
   $now=date("Y-m-d");  
  
  //以下是试验测试  
  // $now=date("Y-m-d",strtotime("-1 day"));   
  // echo "昨天:",date("Y-m-d",strtotime("-1 day")), "  
";  die;  
  //echo "".strtotime($info['time'])."";die;  
  //当前“时间戳”减去数据库里的“时间戳”  
  $cha=strtotime($now)-strtotime($info['time']);  
  //echo $cha;die;  
  //当已经”解锁“时  
  if($cha>=86400){  
   //解锁时间如果到了,清除以前的记录数,还原0  
   if($info['num']!='0'){  
        $data['num']='0';  
        $arr=$model->where("username='$admin'")->save($data);  
     }else{  
        $arr=1;  
     }  
    if($arr){   
    //如果密码争取则显示成功跳转页面  
     if($info['pwd']==$password){  
         $this->success("登陆成功!","返回路径");  
      }else{  
         //如果密码错了则找到对应的用户名  
         $info1=$model->where("username='$admin'")->find();  
         $data['time']=date("Y-m-d");  
         //使数据库里面的”num+1“  
         $data['num']=$info1['num']+1;  
         $times=3-$data['num'];  
         $model->where("username='$admin'")->save($data);  
      if($times>0){  
         $this->error("密码错误!你还剩".$times."次机会");  
       }   
       die;  
      }  
     }  
    }  
  //在解锁时间内,但是不良记录已经达到3次,也是不可以登录的;  
  if($cha<86400 && $info['num']==3){  
     $this->error("你的账号已锁定,请明天登录!");  
     die;  
   }  
  //在解锁时间内,并且不良记录未满3次,可以登录;  
  if($cha<86400 && $info['num']<3){  
     if($info['pwd']==$password){  
          $this->success("登陆成功!","返回路径");  
      }else{  
         //如果密码错了则找到对应的用户名  
         $info1=$model->where("username='$admin'")->find();  
         $data['time']=date("Y-m-d");  
        //使数据库里面的”num+1“  
        $data['num']=$info1['num']+1;  
        $times=3-$data['num'];  
        $model->where("username='$admin'")->save($data);  
      if($times>0){  
          $this->error("密码错误!你还剩".$times."次机会");  
       }else{  
          $this->error("密码错误次数已达3次,账号即将锁定!");  
       }  
     }  
   }  
  }else{  
    echo "用户名错误!";  
  }  
 }  
  
可能会遇到的问题,数据库时间info['time']如何获取?  
  
关于数据库的时间字段,可以给一个初始值,比如2001-01-01等等,在下面时间获取时会更新time()的字段。 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: