php 实现密码错误三次锁定账号10分钟

 
  1. /**

  2. * 登录

  3. * 1、接收数据

  4. * 2、正则判断接收到的数据是否合理

  5. * 3、根据用户名获取用户数据

  6. * 获取到数据 -> 继续执行

  7. * 没有获取到数据 -> 提示:用户名密码错误

  8. * 4、判断锁定时间

  9. * 当前时间和锁定时间差 大于 10分钟 或者 没有锁定时间 -> 继续执行

  10. * 当前时间和锁定时间差 小于 10分钟 -> 提示:账号锁定中、请10分钟后再试

  11. * 5、判断密码

  12. * ==

  13. * 次数=0

  14. * 登录成功

  15. * !=

  16. * 次数 大于等于 2 -> 锁定操作、次数=0 -> 账号已经锁定

  17. * 次数 小于 2 次数+1 -> 账号密码错误

  18. */

  19. public function login()

  20. {

  21. $name = request()->post('name', '');

  22. $pwd = request()->post('pwd', '');

  23. if ( $name == '' || $pwd == '' || $name == null || $pwd == null) {

  24. $arr['code'] = 1;

  25. $arr['msg'] = '参数错误、用户名或密码不能为空';

  26. $arr['data'] = [];

  27. return json($arr);

  28. }

  29. $preg_name = '/^[\x{4e00}-\x{9fa5}]{2,5}$/u';

  30. if( !preg_match( $preg_name, $name ) )

  31. {

  32. $arr['code'] = 1;

  33. $arr['msg'] = '用户名要求必须是2到5位的汉字';

  34. $arr['data'] = [];

  35. return json($arr);

  36. }

  37. $preg_pwd = '/^\S{5,18}$/';

  38. if (!preg_match($preg_pwd, $pwd)) {

  39. $arr['code'] = 1;

  40. $arr['msg'] = '密码要求必须5到18位非空字符串';

  41. $arr['data'] = [];

  42. return json($arr);

  43. }

  44. $where['user_name'] = $name;

  45. $res = Db::table('user')->field('user_id,user_name,user_pwd_login,user_lock_time,user_pwd_num')->where($where)->find();

  46. if (!$res) {

  47. $arr['code'] = 1;

  48. $arr['msg'] = '用户名或密码错误、请重试';

  49. $arr['data'] = [];

  50. return json($arr);

  51. }

  52. if($res['user_lock_time'] != '' && time() - strtotime($res['user_lock_time']) < 1*60 )

  53. {

  54. $arr['code'] = 1;

  55. $arr['msg'] = '该账号已被锁定、请10分钟后重试';

  56. $arr['data'] = [];

  57. return json($arr);

  58. }

  59. $upd_where['user_id'] = $res['user_id'];

  60. if( $pwd != $res['user_pwd_login'] )

  61. {

  62. // 次数 大于等于 2 -> 锁定操作、次数=0 -> 账号已经锁定

  63. if( $res['user_pwd_num'] >= 2 )

  64. {

  65. $upd_data['user_lock_time'] = date('Y-m-d H:i:s', time() );

  66. $upd_data['user_pwd_num'] = 0;

  67. Db::table('user')->where($upd_where )->update( $upd_data );

  68. $arr['code'] = 1;

  69. $arr['msg'] = '账号密码错误次数超过3次、账号锁定10分钟、请稍后重试';

  70. $arr['data'] = [];

  71. return json($arr);

  72. }

  73. else

  74. {

  75. // 次数 小于2 次数+1 -> 账号密码错误

  76. Db::table('user')->where($upd_where)->setInc('user_pwd_num');

  77. $arr['code'] = 1;

  78. $arr['msg'] = '账号密码错误、剩余'. (3 - ($res['user_pwd_num'] + 1) ) .'次、请稍后重试';

  79. $arr['data'] = [];

  80. return json($arr);

  81. }

  82. }

  83. Db::table('user')->where($upd_where)->update(['user_pwd_num'=>0]);

  84. Session::set('user', $res);

  85. $arr['code'] = 0;

  86. $arr['msg'] = '登录成功';

  87. $arr['data'] = $res;

  88. return json($arr);

  89. }

转载于:https://www.cnblogs.com/laowenBlog/p/11507071.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值