Laravel5.0 限制请求频率中间件
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Cache;
use App\Libs\Xres;
class ThrottleRequests {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$unique = $request->getClientIp() . $request->getRequestUri();
if (Cache::has('ip_list')) {
$ip_list = Cache::get('ip_list');
} else {
$ip_list = array();
}
$index = array_search($unique, array_column($ip_list, 'ip'));
if (false === $index) {
array_push($ip_list, ['ip' => $unique, 'time' => $this->time()]);
Cache::put('ip_list', $ip_list, 1440);
} else {
$gap = $this->time() - $ip_list[$index]['time'];
$ip_list[$index]['time'] = $this->time();
Cache::put('ip_list', $ip_list, 1440);
if ($gap < 1000) {
return Xres::error("请求频率过快", 200);
}
}
return $next($request);
}
private function time(){
return (int)(microtime(true)*1000);
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: