为了防止后台被爆破, 需要限制用户登录错误次数
Thinkphp判断管理员用户登陆错误次数, 将次数和IP写入到缓存文件, 设置缓存有效期
当次数大于设定次数, 在缓存有效期内锁定用户登录
以下是实现代码, 如果thinkphp版本大于3.2, S()方法改为cache()方法即可
//判断用户登陆错误次数 private function check_user_login(){ //获取用户的ip作为标识。 $ip = 'login_'.$_SERVER['REMOTE_ADDR']; $err = S($ip); if(empty($err) ){ $err = 1; //S() 缓存写入,300秒 S($ip,$err,300); }elseif(!empty($err) && $err < 3){ $err++; S($ip,$err,300); }elseif($err >= 3){ S($ip,$err,300); } //返回错误次数 return $err; } // 登录检测 public function checkLogin() { //限制用户登录次数 $ip = 'login_'.$_SERVER['REMOTE_ADDR']; $err = S($ip); if(!empty($err) && $err >= 3){ $msg = '您已经错误了'.$err.'次,请5分钟后再试'; $this->error($msg); die; } $map = array(); $map['account'] = $_POST['account']; $map['usertype'] = intval($_POST['usertype']); $map["status"] = array('gt',0); if($_SESSION['verify'] != md5($_POST['verify'])) { $this->error('验证码错误!'); } import ( '@.ORG.Util.RBAC' ); $authInfo = RBAC::authenticate($map); if(!empty($authInfo)) { if($authInfo['password'] != md5($_POST['password'])) { $err = $this->check_user_login(); if($err < 3){ $msg = '您已经错误了'.$err.'次,还剩'. (3 - $err) .'次机会!'; }elseif($err >= 3){ $msg = '您已经错误了'.$err.'次,请5分钟后再试'; } $this->error('密码错误!'.$msg); die; }else{ //保存session 等登录信息 //清除登录错误次数 S($ip,null); $this->success('登录成功!',$gourl); } } }
还没有评论,来说两句吧...