版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq624202120/article/details/42870469
使用原因:
最近一段时间在做作品投票的东西,前端上传过来的图片需要做限制次数,为了避免一次性投多次或者模拟提交的初衷,写了一个了利用SESSION记录投票的方法,限制上传页面。
/*****
*
* 频率限制
* @param String $url 来自哪个网址
* @param Int $times 多少秒之内
* @param Int $num 多少次
* @return false or true
*/
protected function frequency_limitation($url,$times=30,$num=5){
if($_SERVER['HTTP_ORIGIN']!=$url){
return false;
}
if($times<=0) return true;
$time = time();
$ip = $_SERVER['REMOTE_ADDR'];
$ip_time = sprintf('%s_%s',$ip,'time');
$ip_num = sprintf('%s_%s',$ip,'num');
if($_SESSION[$ip_time] || $_SESSION[$ip_num]){ //判断SESSION是否存在,不存在则初始化
if(($_SESSION[$ip_time]+$times) < $time) { //判断SESSION存在的访问ip时间是否小于当前时间,大于则限制住
if($_SESSION[$ip_num] >= $num){ //判断SESSION存在的访问次数是否大于规定次数,不大于则通过,num自增
unset($_SESSION[$ip_time]);
unset($_SESSION[$ip_num]);
$_SESSION[$ip_time] = $time;
$_SESSION[$ip_num] = 1;
}else{
$_SESSION[$ip_num] +=1;
}
}else{
return false;
}
}else{
$_SESSION[$ip_time] = $time;
$_SESSION[$ip_num] = 1;
}
return true;
}