在网站使用中,经常有用户进行恶意的无限制刷新。这种情况下,其实是不允许的,应为这样会给服务器带了一定压力,所以我们需要限制这样的访问,下面,我介绍一种常用的方法,是通过Thinkphp实现的。
<?php
/**
* 限制刷新时间
*
* @param type $id:是否有唯一的标识名;
*
* @return boolean
*/
function flushPageLimit($id = null)
{
$time = 5; //每多少秒
$num = 20; //最多访问次数
$lists = S("noHacker");
$ip = getIp();
if (is_null($id)) {
$sid = session_id();
$key = md5($ip . $sid);
} else {
$key = md5($id);
}
if (!$lists[$key]) {
$lists[$key] = ['time' => time(), "num" => 0];
S('noHacker', $lists);
return true;
} else {
$data = $lists[$key];
if (time() > $data["time"] + $time) {
$lists[$key] = ['time' => time(), "num" => 0];
S('noHacker', $lists); //重置
return true;
}
}
if ($data['num'] >= $num) {
exit("您访问过于频繁,请稍后再访问!!!");
} else {
$lists[$key] = ['time' => time(), "num" => $data['num'] + 1];
S('noHacker', $lists); //添加
}
}