- 封装一个访问控制类 AccessControl,将限制访问次数的代码封装在其中,并添加参数 $key 用于识别用户,代码如下:
key = $key;
if(isset($_SESSION[$this->key])) {
$this->count = $_SESSION[$this->key]['count'];
$this->tomorrow = $_SESSION[$this->key]['tomorrow'];
} else {
$_SESSION[$this->key] = [
'count' => $this->count,
'tomorrow' => $this->tomorrow
];
}
}
public function check() {
// 访问次数+1
$this->count++;
// 判断访问次数是否超过限制次数
if($this->count > $this->limit) {
// 判断明天的时间是否已经设置
if(empty($this->tomorrow)) {
$this->tomorrow = strtotime('+1 day');
$_SESSION[$this->key]['tomorrow'] = $this->tomorrow;
}
// 获取当前时间
$now = time();
// 判断当前时间是否已经超过明天的时间
if($now >= $this->tomorrow) {
// 重置访问次数为0
$this->count = 0;
$_SESSION[$this->key]['count'] = $this->count;
// 跳转到其他页面
header('Location: access_limit.php');
exit();
} else {
// 计算还剩余的时间
$remaining_time = $this->tomorrow - $now;
$remaining_hour = floor($remaining_time / 3600);
$remaining_minute = floor(($remaining_time % 3600) / 60);
$remaining_second = $remaining_time % 60;
// 输出提示信息
$remaining_time = date('H小时i分钟s秒', $remaining_time);
echo '您今天的访问次数已经达到上限,请于'.$remaining_time.'后再来访问。';
exit();
}
}
}
}
?>
- 封装一个倒计时类 Countdown,用于显示剩余时间,代码如下:
remaining_time = $remaining_time;
}
public function show() {
$remaining_hour = floor($this->remaining_time / 3600);
$remaining_minute = floor(($this->remaining_time % 3600) / 60);
$remaining_second = $this->remaining_time % 60;
echo '剩余时间:';
echo $remaining_hour > 0 ? $remaining_hour.'小时' : '';
echo $remaining_minute > 0 ? $remaining_minute.'分钟' : '';
echo $remaining_second.'秒';
}
}
?>
- 封装一个样式类 Style,用于美化限制访问页面的样式,代码如下:
';
echo '
访问受限
';
echo '
您今天的访问次数已经达到上限,请明天再来访问。
';
echo '
';
}
}
?>
在需要限制访问次数的页面中引用 AccessControl 类和 Countdown 类,并在需要显示倒计时的地方添加倒计时代码,如果访问受限则引用 Style 类美化页面样式,代码如下:
check(); // 检查访问次数是否超限
// 可以继续访问
echo '欢迎访问!';
// 显示剩余时间
if(!empty($access_control->tomorrow)) {
$remaining_time = $access_control->tomorrow - time();
$countdown = new Countdown($remaining_time);
$countdown->show();
}
// 访问受限
Style::access_limit();
?>