安全登录一天内连续输入密码错误3次,第二天才能登录


    登录安全性 一天内连续输入密码错误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");    
      //当前“时间戳”减去数据库里的“时间戳”    
      $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()的字段。    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值