用户密码输错N次,自动锁定
好久没更新了,来一篇,一个小功能
看看需求:除去验证码登录,一般的账号密码登录的时候往往会设置各种限制,现在来捋捋这个账号冻结小功能。
功能逻辑:
直接上代码。原生的tp,laravel改造下直接就可以用了
<?php require("conn.php"); require("function.php"); session_start(); //用户登录验证,登录次数>=3,账户冻结;24小时自动解冻 $uid=guolv(trim($_POST['uid'])); $pass=guolv(trim($_POST['pass'])); //uid和pass根据自己情况获取 //检查用户是否存在 $row=$mysql->query("select * from admindata where `uid`={$uid} limit 1"); $time=date("y-m-d h:i:s"); if(empty($row['err_time'])){ //err_time为空,直接进行密码校验 $login=$mysql->query("select * from admindata where `uid`={$uid} and `pass`={$pass} limit 1"); if($login){ echo "登录成功,设置跳转";//登录成功执行的动作 }else{ $count=$login['err_count']; $mysql->query("UPDATE admindata SET `err_time`={$time},`err_count`={$count}+1 where `uid`={$uid}"); //账号密码不对其他操作可以写在下方 } }else{ //如果err_time不为空 $err_time=$login['err_time']; $hour=$hour=floor((strtotime($time)-strtotime($err_time))%86400/3600);//计算时间差 $count=$login['err_count']; if($hour<24&&$count>3){ //24小时以内,错误次数大于3 账户冻结 echo "您的账户已经被冻结,请联系网站管理员";//可以改为其他提醒方式 exit; }else{ //大于24小时,自动解除冻结,重置err_time和err_count的值 $mysql->query("UPDATE admindata SET `err_time`='null',`err_count`='0' where `uid`={$uid}"); $login=$mysql->query("select * from admindata where `uid`={$uid} and `pass`={$pass} limit 1"); if($login){ echo "登录成功,设置跳转";//登录成功执行的动作 }else{ //解除冻结后,账号密码错误的情况,更新数据库,返回登录页 $count=$login['err_count']; $mysql->query("UPDATE admindata SET `err_time`={$time},`err_count`={$count}+1 where `uid`={$uid}"); echo "<script type=\"text/javascript\">document.location(\"login.php\",301);</script>"; } } } ?>
嗯,大概就是这样吧。延展性自己添加就可以
- 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
- 本文网址:https://www.liaotaoo.cn/372.html
- 上篇文章:基于redis的分布式锁防止高并发重复请求
- 下篇文章:Elasticsearch国内镜像下载