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.同一账 ...
随机推荐
- 2019年广东外语外贸大学程序设计竞赛(新手赛)-F题(好快的刀)题解
题面: 题目意为,任意连接两个圆的圆心形成一条直线,计算与该直线相交或相切的圆的数量,求这些直线最多能相交或相切多少个圆 解题思路: 遍历所有的圆,计算出两圆圆心生成的直线,再遍历其他的圆,检测这些圆 ...
- [转帖]reptyr, 将正在运行的程序转换为新终端
reptyr, 将正在运行的程序转换为新终端 https://www.helplib.com/GitHub/article_45241 学习一下. 很抑郁的是 没有 arm64和龙芯平台的二进制文件. ...
- python基础 — 局部变量/全局变量
变量作用区域 变量器作用的额代码范围称为变量的作用与,不同作用区域之间互不影响,函数每部定义的变量一般为局部变量,而不属于任何函数的变量一般为全局变量.所以我们在这里按变量的作用区域分为两类,全局变量 ...
- 10 IO流(七)——copy方法封装、关闭流方法封装的两种方式以及try...with...resource
前言 本文将上一节做的代码,对copy方法与关闭流方法进行封装,并使用try...with...resource关闭流. copy方法封装 我们将copy方法封装,使得只需传入两个流,就能将输入流的源 ...
- win7系统的CMD窗口切换目录--小计
经常使用win7系统的CMD窗口,需要切换到工作目录,方法如下: 1. Win + R 2. 在命令行输入 cmd 出现如下: C:\Users\admin> 3. 在以上输入 D: (表示切换 ...
- json转义问题
后端程序接受前台传递过来json 1正常json没有问题 比如 {"id":21,"userName":"2张天师","phon ...
- 【题解】Luogu P5398 [Ynoi2018]GOSICK
原题传送门 二次离线莫队 二次离线莫队的做法参考第十四分块(前体)的题解 我们需要考虑从(1,i)如何推到(1,i+1) 我们算过了a[i]的答案,考虑加入a[i]的贡献 我们需要在a[i]的所有约数 ...
- treeMultiselect 去掉勾选项
场景描述:弹窗,显示树形结构,节点层次可变(可只有一级节点,也可是多级节点),限制只能选择一个节点! 1.修改jquery.tree-multiselect.min.js 文件 2.前台页面 参考代码 ...
- Jboss部署war以及获取Resource的真实路径
Jboss部署war以及获取Resource的真实路径 最近在将一个SpringBoot项目打成war包部署到Jboss中,中途遇到一些问题记录. Jboss上部署war 普通的SpringBoot项 ...
- 学习笔记之MongoDB
MongoDB - Wikipedia MongoDB is a cross-platform document-oriented database program. Classified as a ...