php - 根据ip限制页面访问次数

标签 php

我想知道如何防止单个 IP 地址占用过多带宽并快速访问我的网页。也就是说,检查用户的 IP 地址(我认为 $_SERVER['REMOTE_ADDR'] ?),检查该用户的最新访问,计算时间差,如果间隔很短则阻止渲染页面。我对吗?如果是这样,我怎样才能做到这一点而不消耗服务器上太多的资源和/或时间?如果有数据库方式的话,是不是会导致锁太多?

最佳答案

最好的方法取决于您想要阻止的人。如果是真正的用户不断刷新页面,那么(a)您真的想阻止他们吗?他们是您的用户!?,(b)您可以使用基于 session 的方法来避免数据库命中。如果是机器人,那么您不能依赖 session (因为它们可能不会发送 session header ,或者它们当前可能发送 session header ,但它们是会绕过它的恶意机器人)。

如果是真正的用户,那么假设您可以设置 session cookie,您将需要如下所示的内容:

<?php
$min_seconds_between_refreshes = 3;

session_start();

if(array_key_exists('last_access', $_SESSION) && time()-$min_seconds_between_refreshes <= $_SESSION['last_access']) {
  // The user has been here at least $min_seconds_between_refreshes seconds ago - block them
  exit('You are refreshing too quickly, please wait a few seconds and try again.');
}
// Record now as their last access time
$_SESSION['last_access'] = time();
?>

如果是机器人,那么您可能会实现具有类似逻辑的基于数据库的解决方案。

事实上,这两种情况下的正确解决方案可能是在应用程序服务器前面放置一个缓存代理服务器。这将减少主应用服务器上的负载,并且意味着您不必太担心此类情况。

关于php - 根据ip限制页面访问次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057209/

相关文章:

php - 将 OpenID 集成到 Symfony 1.4 中?

php - 即使使用实时 api 凭据,Paypal Express Checkout 错误

php - 如何在表单中列出查询结果(EntityType)

javascript - 如何通过调用ajax请求从PHP页面重定向

php - 网站多页 |模板 |搜索

javascript - 在将数据插入数据库之前验证数据

php - 从 PHP 调用的查询中的 MySQL (MariaDB) 执行超时

php - 如何使用php创建一个表头在左侧的表格?

php - 无法加载请求的文件: category. php

php - 显示来自 mysql 列的计数值?