/**
* 登录
* 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. layui父页面执行子页面方法

    parent.window[layero.find('iframe')[0]['name']].子页面方法(); layero.find('iframe')[0].contentWindow.子页面方 ...

  2. 第6/7Beta冲刺

    1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...

  3. log sum of exponential

    The so-called “log sum of exponentials” is a functional form commonly encountered in dynamic discret ...

  4. 【转帖】编译-O 选项对性能提升作用

    编译-O 选项对性能提升作用 https://www.cnblogs.com/pigerhan/p/3526889.html GCC -O 选项 这个选项控制所有的优化等级.使用优化选项会使编译过程耗 ...

  5. Java开发笔记(一百二十)AWT文本标签

    前面介绍了AWT窗口及其面板的简单用法,其中展示出来的控件只有按钮一种,还有很多好用好玩的控件有待介绍.首先是文本标签Label,该控件用于显示一段平铺文本,它不花哨也不跳动,完全就是素面朝天的文本字 ...

  6. web页面元素定位

    所有web网页中有8种元素定位方式 靠单一的特征找元素:6种(id,class_name,tag_name,name,link_text(2))组合各种特征和关系来找元素:2种(xpath,css) ...

  7. Create your first Java application

    参考链接 -[IntelliJ IDEA] https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-appli ...

  8. 使用lxml解析HTML代码

    做个参考,转自:https://blog.csdn.net/qq_42281053/article/details/80658018

  9. a 链接锚点

    建立锚点的元素必须要有 id 或 name 属性,最好两个都有. 锚点超链接一定包含井号 "#",锚点超链接都在链接的最末端,具体看后面例子: 同一个页面不同部分的跳转 目标元素: ...

  10. Spring Cloud Alibaba学习笔记(16) - Spring Cloud Gateway 内置的路由谓词工厂

    Spring Cloud Gateway路由配置的两种形式 Spring Cloud Gateway的路由配置有两种形式,分别是路由到指定的URL以及路由到指定的微服务,在上文博客的示例中我们就已经使 ...