// 使用方法
if(!$this->limitSendCount($request->ip())){
return resjson(404, '登录频繁,请稍后再试');
}
// 定义方法
private function limitSendCount($ip)
{
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379, 0.2);
$minKey = 'hq_login_count_'.$ip.'minLimte';
$dayKey = 'hq_login_count_'.$ip.'dayLimte';
$value = $redis->get($minKey);
$dayValue = $redis->get($dayKey);
if($value == null){
$redis->set($minKey,1);
$redis->expire($minKey,60);//过期时间1分钟
if($dayValue == null){
$redis->set($dayKey,1);
$redis->expire($dayKey,3600);//过期时间1小时
}else{
$redis->incr($dayKey);//加一次
if($dayValue > 30){
//访问受限
$redis->close();
return false;
}
}
}else{
// 1分钟内超过10次,或者1小时超过30次,就禁止访问
if($value > 10 || $dayValue > 30){
//访问受限
$redis->close();
return false;
}
$redis->incr($minKey);//加一次
$redis->incr($dayKey);//加一次
}
$redis->close();
return true;
}
暂无评论