当前位置: 首页 > 后端技术 > PHP

PHP实现三次密码错误锁定账户10分钟

时间:2023-03-29 19:11:57 PHP

直接上传代码/***登录*1.接收数据*2.定时判断接收到的数据是否合理*3.根据用户名获取用户数据*获取数据->继续执行*没有获取到数据->提示:用户名密码错误*4.判断锁定时间*当前时间与锁定时间相差大于10分钟或没有锁定时间->继续执行*当前时间与锁定时间相差为不到10分钟->提示:账号被锁定,请稍候10分钟尝试*5.确定密码*==*次数=0*登录成功*!=*次数大于等于2->锁定操作,times=0->账号被锁定*次数小于2次+1->账号密码错误*/publicfunctionlogin(){$name=request()->post('name','');$pwd=request()->post('pwd','');如果($name==''||$pwd==''||$name==null||$pwd==null){$arr['code']=1;$arr['msg']='参数错误,用户名或密码不能为空';$arr['数据']=[];返回json($arr);}$preg_name='/^[\x{4e00}-\x{9fa5}]{2,5}$/u';如果(!preg_match($preg_name,$name)){$arr['code']=1;$arr['msg']='用户名要求必须是2到5位汉字';$arr['数据']=[];返回json($arr);}$preg_pwd='/^\S{5,18}$/';如果(!preg_match($preg_pwd,$pwd)){$arr['code']=1;$arr['msg']='密码需要5到18个非空字符串';$arr['数据']=[];返回json($arr);}$where['user_name']=$name;$res=Db::table('user')->field('user_id,user_name,user_pwd_login,user_lock_time,user_pwd_num')->where($where)->find();如果(!$res){$arr['code']=1;$arr['msg']='用户名或密码错误,请重试';$arr['数据']=[];返回json($arr);}if($res['user_lock_time']!=''&&time()-strtotime($res['user_lock_time'])<1*60){$arr['code']=1;$arr['msg']='帐号已被锁定,请10分钟后重试';$arr['数据']=[];返回json($arr);}$upd_where['user_id']=$res['user_id'];如果($pwd!=$res['user_pwd_login']){//大于或等于2的次数->锁定操作,次数=0->帐户被锁定if($res['user_pwd_num']>=2){$upd_data['user_lock_time']=date('Y-m-dH:i:s',time());$upd_data['user_pwd_num']=0;Db::table('user')->where($upd_where)->update($upd_data);$arr['代码']=1;$arr['msg']='账号密码错误次数超过3次,账号已被锁定10分钟,请稍后再试';$arr['数据']=[];返回json($arr);}else{//次数小于2次+1->账号密码错误Db::table('user')->where($upd_where)->setInc('user_pwd_num');$arr['代码']=1;$arr['msg']='账号密码错误,剩余'.(3-($res['user_pwd_num']+1)).'次,请稍后重试';$arr['数据']=[];返回json($arr);}}Db::table('user')->where($upd_where)->update(['user_pwd_num'=>0]);会话::设置('用户',$res);$arr['代码']=0;$arr['msg']='登录成功';$arr['数据']=$res;返回json($arr);}