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);
    }
  • 相关阅读:
    你的服务器和网站为什么会被反复入侵
    MAC 查看当前安装的JDK位置
    Jmeter高并发测试
    解密AndroidManifest.xml、AXMLPrinter2.jar源码下载
    Win10家庭版如何启用本地组策略
    SQLFlow使用中的注意事项--设置篇
    Sqlflow 之隐私政策(Privacy plolicy)介绍
    血缘关系分析工具SQLFLOW--实践指南
    Oracle SQL 性能优化利器
    SQLFlow数据流分析工具的job功能介绍
  • 原文地址:https://www.cnblogs.com/liujunyue/p/11510222.html
Copyright © 2011-2022 走看看