好久没更新了,来一篇,一个小功能

看看需求:除去验证码登录,一般的账号密码登录的时候往往会设置各种限制,现在来捋捋这个账号冻结小功能。

功能逻辑

1)给用户表增加两个字段:err_time(登录账号密码输错的时间),err_count(账号密码输错次数)。在这里波波说的一点就是也有朋友建议用缓存的方式,但是我想了一下如果用缓存的话,存在一些人会登录一下清除一下浏览器缓存,这样即使多次输错,也实现不了账号冻结,无法保证安全。想尝试的朋友可以尝试,当然也可以将数据写进内存中。

2)若err_time不为空,则检查记录时间和现在当前时间的差值。如果时间差值大于24则清除用户表中err_time和err_count的字段值,并进行账户密码校验。
若小于24小时,则检查err_count的值是否大于等于3,大于等于3的时候提示账户冻结,禁止登陆,小于3的时候看账户密码的校验返回值,确定登陆成功还是失败。
3)若err_time为空,则执行账户密码的校验。

直接上代码。原生的tp,laravel改造下直接就可以用了

  1. <?php
  2.     require("conn.php");
  3.     require("function.php");
  4.     session_start();
  5.     //用户登录验证,登录次数>=3,账户冻结;24小时自动解冻
  6.     $uid=guolv(trim($_POST['uid']));
  7.     $pass=guolv(trim($_POST['pass']));
  8.  
  9.     //uid和pass根据自己情况获取
  10.     //检查用户是否存在
  11.     $row=$mysql->query("select * from admindata where `uid`={$uid} limit 1");
  12.  
  13.     $time=date("y-m-d h:i:s");
  14.  
  15.     if(empty($row['err_time'])){
  16.         //err_time为空,直接进行密码校验
  17.         $login=$mysql->query("select * from admindata where `uid`={$uid} and `pass`={$pass} limit 1");
  18.         if($login){
  19.             echo "登录成功,设置跳转";//登录成功执行的动作
  20.         }else{
  21.             $count=$login['err_count'];
  22.             $mysql->query("UPDATE admindata SET `err_time`={$time},`err_count`={$count}+1 where `uid`={$uid}");
  23.         //账号密码不对其他操作可以写在下方
  24.         }
  25.     }else{
  26.         //如果err_time不为空
  27.         $err_time=$login['err_time'];
  28.         $hour=$hour=floor((strtotime($time)-strtotime($err_time))%86400/3600);//计算时间差
  29.         $count=$login['err_count'];
  30.         if($hour<24&&$count>3){
  31.             //24小时以内,错误次数大于3 账户冻结
  32.             echo "您的账户已经被冻结,请联系网站管理员";//可以改为其他提醒方式
  33.             exit;
  34.         }else{
  35.             //大于24小时,自动解除冻结,重置err_time和err_count的值
  36.             $mysql->query("UPDATE admindata SET `err_time`='null',`err_count`='0' where `uid`={$uid}");
  37.             $login=$mysql->query("select * from admindata where `uid`={$uid} and `pass`={$pass} limit 1");
  38.             if($login){
  39.                 echo "登录成功,设置跳转";//登录成功执行的动作
  40.             }else{
  41.                 //解除冻结后,账号密码错误的情况,更新数据库,返回登录页
  42.                 $count=$login['err_count'];
  43.                 $mysql->query("UPDATE admindata SET `err_time`={$time},`err_count`={$count}+1 where `uid`={$uid}");
  44.                 echo "<script type=\"text/javascript\">document.location(\"login.php\",301);</script>";
  45.             }
  46.         }
  47.     }
  48. ?>

嗯,大概就是这样吧。延展性自己添加就可以

评论一下 
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!