PHP 限制网站访问次数代码优化 - 防止恶意访问和性能问题

本文提供优化后的 PHP 代码,用于限制网站访问次数,解决以下问题:

  1. 没有对访问次数进行验证,可能会导致非法访问或者恶意攻击。
  2. 访问次数的限制是基于 session 的,若用户清除了浏览器缓存或者使用了多个浏览器,则无法达到限制访问次数的目的。
  3. 访问次数的计算和判断是在服务端进行的,若网站存在高并发访问的情况,则可能会导致性能问题。

优化后的代码:

<?php

// 设置每天允许访问的最大次数
$max_access_count = 10;

// 获取当前时间戳
$current_timestamp = time();

// 获取今天开始时间戳
$today_start_timestamp = strtotime('today');

// 设置访问次数存储键名
$access_count_key = 'access_count_' . date('Y-m-d');

// 检查当前用户今天是否已经访问过
if (!isset($_SESSION[$access_count_key])) {
    // 首次访问,初始化访问次数
    $_SESSION[$access_count_key] = 1;
} else {
    // 已经访问过,增加访问次数
    $_SESSION[$access_count_key]++;
}

// 判断是否超过访问次数限制
if ($_SESSION[$access_count_key] > $max_access_count) {
    // 计算剩余时间
    $remaining_time = $today_start_timestamp + 86400 - $current_timestamp;
    $remaining_hour = floor($remaining_time / 3600);
    $remaining_minute = floor(($remaining_time % 3600) / 60);
    $remaining_second = $remaining_time % 60;

    // 输出提示信息
    echo '您今天的访问次数已经达到上限,请于 ' . $remaining_hour . ' 小时 ' . $remaining_minute . ' 分钟 ' . $remaining_second . ' 秒 后再来访问。';
} else {
    // 可以继续访问
    echo '欢迎访问!';
}

?>

调用代码:

直接在需要限制访问次数的页面中引用即可:

include 'access_control.php';

优化说明:

  1. 使用时间戳进行访问次数控制,避免了使用 Session 造成的限制。
  2. 将访问次数存储在 Session 中,并使用日期作为键名,保证每天的访问次数独立计算。
  3. 在判断访问次数是否超过限制时,计算剩余时间并输出提示信息,提供更人性化的体验。

注意:

  1. 代码中使用了 $_SESSION,请确保您的项目中已经开启了 Session。
  2. 您可以根据实际情况调整 $max_access_count 的值来设置每天允许访问的最大次数。
  3. 该代码仅供参考,具体实现方法可以根据您的项目需求进行调整。
PHP 限制网站访问次数代码优化 - 防止恶意访问和性能问题

原文地址: https://www.cveoy.top/t/topic/mv5P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录