/**
* 登录
* 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);
}

php 实现密码错误三次锁定账号10分钟的更多相关文章

  1. python密码错误三次锁定

    程序需求: 输入用户名,密码 认证成功显示欢迎信息 输入错误三次后锁定用户 流程图: 好像画的不咋地 #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Fi ...

  2. 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

      通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...

  3. 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数

    通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...

  4. 通过游戏学python 3.6 第一季 第七章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号

    #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误 ...

  5. DiscuzX2.5密码错误次数过多,请 15 分钟后重新登录的修改办法

    source\function function_login.php $return = (!$login || (TIMESTAMP - $login['lastupdate'] > )) ? ...

  6. django 实现登录时候输入密码错误5次锁定用户十分钟

    在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱, 于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个 ...

  7. oracle用户密码错误导致用户锁定

    解决方法:使用DBA用户将其解锁: SQL> alter user ecology account unlock; 用户已更改. 用户密码限制设置: 查看FAILED_LOGIN_ATTEMPT ...

  8. 解决zlibrary注册后,再次登录提示密码错误的问题

    很多小伙伴注册后,再登录提示电子邮件或密码错误,但是可以确认账号密码都是正确的,这种应该怎么处理呢? 其实这种问题有两种处理方式, 首先使用 https://find.looks.wang/ 检测可以 ...

  9. Python 文件读写,条件循环(三次登录锁定账号实例)

    通过文件读写,条件循环相关语法,实现三次登录失败则锁定该账号的功能 需求一 """需求描述: 1.输入正确账号,密码,退出程序 2.登录失败,重新输入账号密码 3.同一账 ...

随机推荐

  1. web自动化测试笔记(一)

    web自动化测试环境配置(JDK) 使用selenium工具做自动化测试之前,首先要做的准备工作是配置一下web自动化测试的环境. 1.下载jdk http://www.oracle.com/tech ...

  2. C++和C API调用

    c++是C的超集,不可避免的要兼容C的特性,C++在C基础山的拓展部分叫做C with class,同时C++有自己特有的属性比如模板template. C并不完全是C++的子集. 那么如何在C/C+ ...

  3. JAVA多态中的隐藏和覆盖

    Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型 编译时类型:由声明该变量时使用的类型决定 运行时类型:由该变量指向的对象类型决定 如果编译时类型和运行时类型不一致,会出现所谓的多态. ...

  4. AR*客户地点分配OU

    DECLARE p_cust_acct_site_rec hz_cust_account_site_v2pub.cust_acct_site_rec_type; p_cust_site_use_rec ...

  5. 2019CCPC网络赛

    ^&^ (HDU 6702) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  6. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

    12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...

  7. 启迪链网通证经济共同体:柏链教育&火聘online推出区块链行业人才“一门式”服务

    近日,启迪链网通证经济共同体旗下两个节点成员柏链教育与火聘online,达成节点间的合作,据悉本次合作是采用共同体的生态共建模式,柏链教育与火聘online共享企业端岗位需求的大数据,然后有针对性的开 ...

  8. 【LEETCODE】47、985. Sum of Even Numbers After Queries

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  9. 【C#】课堂知识点#4

    1.回顾类中基本结构. 成员分为: a.(数据成员) , b.(方法成员) 数据成员: 字段 方法成员:方法,构造函数,属性,索引器,运算符. 属性的作用: 对字段进行访问提供get,set方法. 类 ...

  10. 温故知新-网络基础1-ip地址计算

    网络地址换算 1.网络地址分类 A类:0.0.0.0到127.255.255.255 255.0.0.0/8 B类:128.0.0.0到191.255.255.255 255.255.0.0/16 C ...