根据业务需求!提高网站的安全性,用户一天之内,密码错误三次,这今天账户锁定,次日自动解冻!
我的博客
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`u_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '会员管理 id',
`u_name` varchar(30) DEFAULT NULL COMMENT '用户姓名',
`username` varchar(30) DEFAULT NULL COMMENT '用户名',
`password` varchar(30) DEFAULT NULL COMMENT '会员密码',
`price` decimal(10,0) DEFAULT NULL COMMENT '余额',
`add_time` int(11) DEFAULT NULL COMMENT '创建时间',
`log_num` int(11) DEFAULT '0' COMMENT '步长',
`last_time` int(11) DEFAULT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='会员管理';
以上表名,比以往的user表多两个字段,
1.记录时间,上次登陆时间,
2.步长 记录登陆错误次数
思路:
1.判断 验证 用户名
2.如果时间不是当天 并且 步长大于0 那么步长归0
3.如果步长大于3,锁定用户
4.判断密码 a.登陆成功 步长重置 b.登陆失败 步长+1 时间记录
简单的需求思路 下面code
//管理员登陆 限制三次
public function doLogin(){
//接受前台提交的用户名 密码
$data = I('post.');
$model = M("admin");
//查询当前用户信息
$reg = $model->where('username = "'.$data['username'].'"')->find();
if(!$reg){
$this->error("账户不存在",U('Admin/login'));
}
//1最后登陆时间不是当天,并且错误次数大于0 那么让他的步张=0
if(date("Ymd",$reg['last_time']) != date("Ymd") && $reg['log_num']>0){
$reg['log_num'] = 0;
}
//2判断步长大于等于3 账户 锁定账户
if($reg['log_num']>=3){
$this->error("账户被锁定了,明天再来吧",U('Admin/login'));
}
//3判断密码是否正确 ->登陆成功步长重置
if($data['pwd'] == $reg['password']){ //登陆成功
session("user",$reg);
if($reg['log_num']>0){
$model->where('a_id ='.$reg['a_id'])->save(array('log_num'=>0));
}
$this->success("登陆成功",U('Index/index'));
}else{ //登陆失败
$num = $reg['log_num']+1;
$time_num = array('log_num'=>$num,'last_time'=>time());
$model->where('a_id ='.$reg['a_id'])->save($time_num);
//判断还能登陆几次
$log_num = 2 - $reg['log_num'];
$str = "密码错误,还能登".$log_num."次";
//错误提示 判断是否锁定
if($log_num <=0) $str = "账户被锁定";
$this->error($str);
}
}