tp6 中间件

function limitoftimes($numberoftimes=10,$timespant="oneday",$verification=false){
$cacheneme = request()->url().$numberoftimes;
$nowtimes = cache($cacheneme);//获取缓存中的当前次数
if($nowtimes>=$numberoftimes) return false;
if($verification)return true;
if($timespant==="oneday"){
$expires_in = strtotime(date('Y-m-d',strtotime('+1 day'))) - time();
}else{
$expires_inname = $cacheneme."-".$timespant;//设置时间缓存名称
$expires_intime = cache($expires_inname);
if($expires_intime){
$expires_in = $timespant-(request()->time() - $expires_intime);
}else{
$expires_in = $timespant;
cache($expires_inname,request()->time(),$expires_in);
}
}
$nowtimes = $nowtimes+1;//不可用++ 因为有false的情况
cache($cacheneme,$nowtimes,$expires_in);
return $numberoftimes-$nowtimes;
}
/**
* 处理请求
*
* @param \think\Request $request
* @param \Closure $next
* @return
*/
public function handle($request, \Closure $next)
{
$Api=$this->limitoftimes(20,60);
if($Api===false){
echo '检测到您存在恶意请求行为,屏蔽一分钟';die;
}
return $next($request);
}
posted on 2021-12-30 11:52  少雄3306  阅读(54)  评论(0)    收藏  举报