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);
}
php 实现密码错误三次锁定账号10分钟的更多相关文章
- python密码错误三次锁定
程序需求: 输入用户名,密码 认证成功显示欢迎信息 输入错误三次后锁定用户 流程图: 好像画的不咋地 #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Fi ...
- 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...
- 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数
通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...
- 通过游戏学python 3.6 第一季 第七章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误 ...
- DiscuzX2.5密码错误次数过多,请 15 分钟后重新登录的修改办法
source\function function_login.php $return = (!$login || (TIMESTAMP - $login['lastupdate'] > )) ? ...
- django 实现登录时候输入密码错误5次锁定用户十分钟
在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱, 于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个 ...
- oracle用户密码错误导致用户锁定
解决方法:使用DBA用户将其解锁: SQL> alter user ecology account unlock; 用户已更改. 用户密码限制设置: 查看FAILED_LOGIN_ATTEMPT ...
- 解决zlibrary注册后,再次登录提示密码错误的问题
很多小伙伴注册后,再登录提示电子邮件或密码错误,但是可以确认账号密码都是正确的,这种应该怎么处理呢? 其实这种问题有两种处理方式, 首先使用 https://find.looks.wang/ 检测可以 ...
- Python 文件读写,条件循环(三次登录锁定账号实例)
通过文件读写,条件循环相关语法,实现三次登录失败则锁定该账号的功能 需求一 """需求描述: 1.输入正确账号,密码,退出程序 2.登录失败,重新输入账号密码 3.同一账 ...
随机推荐
- Burp Suite 如何抓取HTTPS请求
1,下载安装burp suite工具 https://portswigger.net/burp/communitydownload 如果是windows系统,选择windows点击Download下载 ...
- Google深度学习开源框架TenseorFlow安装
Google近期发布了TensorFlow,考录到Google出品,必属精品,估计这玩意会火,不过火钳刘明已经来不及了 今天才想着安装来试试 TensorFlow官网:https://www.tens ...
- 1.RabbitMQ工作模型与基本原理
1.了解 MQ 的本质和 RabbitMQ 的特性: 2.掌握 RabbitMQ 的 Java API 编程和 Spring 集成 RabbitMQ 1. MQ 了解 1.1. 消息队列简介 ...
- Linux中进行jdk的安装+Tomcat安装+mysql的安装
1.上传所需要的文件(这里事先准备好了jdk和tomcat的安装包,mysql需要在线安装) jdk的安装包名称:jdk-8u151-linux-x64.tar.gz tomcat 的安装包名称:ap ...
- Python第六章 面向对象
第六章 面向对象 1.面向对象初了解 面向对象的优点: 1.对相似功能的函数,同一个业务下的函数进行归类,分类 2.类是一个公共的模板,对象就是从具体的模板中实例化出来的,得到对象就得到一 ...
- Java集合对比
1.array和ArrayList 的区别?1.1:ArrayList是Array的复杂版本1.2:数组不能扩容集合可以扩容1.3:存储的数据类型:Array只能存储相同数据类型的数据,而ArrayL ...
- Python模拟知乎登录
# -*- coding:utf-8 -*- import urllib import urllib2 import cookielib import time from PIL import Ima ...
- UnityShader - 渲染管线
定义: 显卡内部处理图像信号的并行处理单元,也称为渲染流水线 发生位置: CPU和GPU 渲染机理: 将图像所具备的图形信息(顶点.纹理.材质.摄像机位置等)经过一系列阶段的处理,最终转换为屏幕上的图 ...
- (三) Docker 常用操作与CentOS7 防火墙命令
参考并感谢 Docker 常用命令 https://docs.docker.com/engine/reference/commandline/docker/ Docker 登录docker账户 doc ...
- js校验规则--去空格、加空格
为了更加直观,有些号码需要加空格: // 拼接空格,每4位加一个空格 let bankAccount = '6228888888888888888'; let blank_value = bankAc ...