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

来源:互联网 发布:网络女作家 编辑:程序博客网 时间:2024/04/29 13:26
登录安全性 一天内连续输入密码错误3次,第二天才能登录(过了当天凌晨24点)下面我们先在数据库中建立一个试验表,id,用户名username,密码pwd,次数num,时间time(date);这个功能主要在数据库中分3中情况判断1:解锁时间到了,清除数据库以前的记录数,次数值还原02:在解锁时间内,但是不良记录已经达到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()的字段。

0 0
原创粉丝点击