使用 PHP 简单实现当用户连续输错密码5次,锁定用户10分钟;连续被锁定3次,封禁用户 IP;如果成功登录,则输错次数和被锁定次数等相关字段清0(默认值)。
用户表部分相关字段:
denied 输错密码次数 默认:0
locked 被锁定次数 默认:0
lockTime 被锁定时间 默认:'0000-00-00 00:00:00'
ip 被锁定的IP 默认:空
function comparePassword($account, $password) {
## $account输入的用户名 $password 输入的密码 if(!$account or !$password) return false; /* 先通过用户名从数据库中获取该用户记录 */ $user = $this->dao->select('*')->from('user') ->Where('account')->eq($account) ->fetch(); if(!$user) return false; // 连续输错密码5次,锁定用户10分钟;连续被锁定3次,封禁用户IP;成功登录,输错次数和被锁定次数清0; if($user->ip != ''){ $surrentIP = helper::getRemoteIp();##获取用户的ip if ($surrentIP == $user->ip) { $this->lang->user->loginFailed = $this->lang->user->banned; return false; }else{ $user->ip = ''; } } if($user->lockTime != '0000-00-00 00:00:00'){ $timeDiff = time() - strtotime($user->lockTime); if($timeDiff >0 && $timeDiff <= 10*60){ $this->lang->user->loginFailed = sprintf($this->lang->user->locked, '10'); $this->dao->update('user')->data($user)->where('id')->eq($user->id)->exec(); return false; }else{ $user->denied = 0; $user->lockTime = '0000-00-00 00:00:00'; } } // 对比用户输入的密码与数据库存储的密码并更新记录 $password = md5($password . $user->account); if(!($password == $user->password)){ $user->denied ++; if($user->denied > 4){ $user->lockTime = date('Y-m-d H:i:s', time()); $user->locked ++; if($user->locked > 2){ $user->ip = helper::getRemoteIp(); } } $this->dao->update('user')->data($user)->where('id')->eq($user->id)->exec(); return false; } $user->ip = ''; $user->denied = 0; $user->locked = 0; $user->lockTime = '0000-00-00 00:00:00'; $this->dao->update('user')->data($user)->where('account')->eq($user->account)->exec(); return $user; }
PHP 用户登录失败后被锁定限制的功能实现
继续阅读与本文标签相同的文章
上一篇 :
扩容阿里云数据盘(CentOS系统)
下一篇 :
MySQL以逗号隔开的字符串查询方式整理
-
阿里云Linux服务器动态扩容(阿里云服务器扩容后磁盘空间无变化解决方法)
2020-11-30栏目: 建站教程
-
6个SEM实战技巧,大神手把手教你做推广!
2020-07-20栏目: SEM
-
苏州美食推荐,持续更新
2020-06-17栏目: 生活笔记
-
企业如何玩转视频号
2020-05-12栏目: 运营杂谈
-
SEO关键词排名该掌握的核心优化技巧
2020-05-12栏目: SEO
打印
分享
发表评论 已发布 0 条