zoukankan      html  css  js  c++  java
  • php 实现密码错误三次锁定账号10分钟

    /**
    * 登录
    * 1、接收数据
    * 2、正则判断接收到的数据是否合理
    * 3、根据用户名获取用户数据
    * 获取到数据 -> 继续执行
    * 没有获取到数据 -> 提示:用户名密码错误
    * 4、判断锁定时间
    * 当前时间和锁定时间差 大于 10分钟 或者 没有锁定时间 -> 继续执行
    * 当前时间和锁定时间差 小于 10分钟 -> 提示:账号锁定中、请10分钟后再试
    * 5、判断密码
    * ==
    * 次数=0
    * 登录成功
    * !=
    * 次数 大于等于 2 -> 锁定操作、次数=0 -> 账号已经锁定
    * 次数 小于 2 次数+1 -> 账号密码错误
    */

    public function login()
    {
    $name = request()->post('name', '');
    $pwd = request()->post('pwd', '');
    if ( $name == '' || $pwd == '' || $name == null || $pwd == null) {
    $arr['code'] = 1;
    $arr['msg'] = '参数错误、用户名或密码不能为空';
    $arr['data'] = [];
    return json($arr);
    }

    $preg_name = '/^[x{4e00}-x{9fa5}]{2,5}$/u';
    if( !preg_match( $preg_name, $name ) )
    {
    $arr['code'] = 1;
    $arr['msg'] = '用户名要求必须是2到5位的汉字';
    $arr['data'] = [];
    return json($arr);
    }

    $preg_pwd = '/^S{5,18}$/';
    if (!preg_match($preg_pwd, $pwd)) {
    $arr['code'] = 1;
    $arr['msg'] = '密码要求必须5到18位非空字符串';
    $arr['data'] = [];
    return json($arr);
    }

    $where['user_name'] = $name;
    $res = Db::table('user')->field('user_id,user_name,user_pwd_login,user_lock_time,user_pwd_num')->where($where)->find();
    if (!$res) {
    $arr['code'] = 1;
    $arr['msg'] = '用户名或密码错误、请重试';
    $arr['data'] = [];
    return json($arr);
    }

    if($res['user_lock_time'] != '' && time() - strtotime($res['user_lock_time']) < 1*60 )
    {
    $arr['code'] = 1;
    $arr['msg'] = '该账号已被锁定、请10分钟后重试';
    $arr['data'] = [];
    return json($arr);
    }

    $upd_where['user_id'] = $res['user_id'];
    if( $pwd != $res['user_pwd_login'] )
    {
    // 次数 大于等于 2 -> 锁定操作、次数=0 -> 账号已经锁定
    if( $res['user_pwd_num'] >= 2 )
    {
    $upd_data['user_lock_time'] = date('Y-m-d H:i:s', time() );
    $upd_data['user_pwd_num'] = 0;
    Db::table('user')->where($upd_where )->update( $upd_data );
    $arr['code'] = 1;
    $arr['msg'] = '账号密码错误次数超过3次、账号锁定10分钟、请稍后重试';
    $arr['data'] = [];
    return json($arr);
    }
    else
    {
    // 次数 小于2 次数+1 -> 账号密码错误
    Db::table('user')->where($upd_where)->setInc('user_pwd_num');
    $arr['code'] = 1;
    $arr['msg'] = '账号密码错误、剩余'. (3 - ($res['user_pwd_num'] + 1) ) .'次、请稍后重试';
    $arr['data'] = [];
    return json($arr);
    }
    }

    Db::table('user')->where($upd_where)->update(['user_pwd_num'=>0]);

    Session::set('user', $res);
    $arr['code'] = 0;
    $arr['msg'] = '登录成功';
    $arr['data'] = $res;
    return json($arr);
    }
  • 相关阅读:
    进程与线程
    the art of seo(chapter seven)
    the art of seo(chapter six)
    the art of seo(chapter five)
    the art of seo(chapter four)
    the art of seo(chapter three)
    the art of seo(chapter two)
    the art of seo(chapter one)
    Sentinel Cluster流程分析
    Sentinel Core流程分析
  • 原文地址:https://www.cnblogs.com/liujunyue/p/11510222.html
Copyright © 2011-2022 走看看