说明
这是一个防频繁请求登录接口导致服务器性能占用过多。也可以防止别人尝试密码
原理
记录用户访问次数,到指定次数后对他进行锁处理。实现方法很简单,前端使用 Cookie 进行请求记录,请求成功会把登录次数相关的 Cookie 清理掉。接口端也需要一起进行记录防止直接对接口进行请求。接口端使用 Redis 记录他的 IP,又用别一个键来判别锁状态。
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <?php
$redis = new Redis(); $redis->connect("127.0.0.1", 6379); $redis->auth('you_password'); $redis->select(3);
$ip = get_client_ip();
if ($redis->get("login_lock.{$ip}")) { }
$redis->incr("login_count.{$ip}");
$addLockCount = 3; if ($addLockCount < $redis->get("login_count.{$ip}")) { $redis->incr("login_lock_count.{$ip}");
$lockTime = 60 * $redis->get("login_lock_count.{$ip}"); $redis->set("login_lock.{$ip}", $ip, $lockTime);
$redis->del("login_count.{$ip}"); }
$redis->del("login_count.{$ip}"); $redis->del("login_lock.{$ip}"); $redis->del("login_lock_count.{$ip}");
|