PHP限制接口访问频率

代码 1年前 (2022) 站长
218 0 0

记录一下在网上找到的限制api访问次数的代码,可根据用户id或者ip限制。
以下代码限制用户60秒内可访问10次,次数内正常访问,超出就返回频繁提示。

function api_frequency_visits ($uid) {
	$key = "user:{$uid}:api:frequency";
	$redis = new Redis();
	$redis->connect('127.0.0.1');
	$data = $redis->hGetAll($key);
	//需要删除的key
	$del_key = [];
	//时间内访问的总次数
	$total = 0;
	//时间内最大访问次数
	$max_frequency = 10;
	//当前时间
	$now_time = time();
	//限制时间
	$limit_time = 60;
	foreach ($data as $time=>$count) {
		if ($time < $now_time - $limit_time) { $del_key[] = $time; } else { $total += $count; } } //存在需要删除的key if ($del_key) { $redis->hDel($key, ...$del_key);
	}
	if ($total >= $max_frequency) {
		return false;
	}
	return $redis->hIncrBy($key, $now_time, 1);
}
$uid = 1;
$result = api_frequency_visits($uid);
if (!$result) {
	echo json_encode(['code'=>0, 'msg'=>'操作过于频繁', 'data'=>[]]);
	die;
}
echo json_encode(['code'=>1, 'msg'=>'', 'data'=>[
'uid'=>$uid,
'other'=>rand()
]]);
PHP限制接口访问频率
版权声明:站长 发表于 2022年11月12日 pm12:44,最后更新时间2022-11-12 12:58:02。
转载请注明:PHP限制接口访问频率 | 影视导航

相关文章

暂无评论

暂无评论...