【问题标题】:php limit request per second每秒php限制请求
【发布时间】:2011-10-22 05:01:10
【问题描述】:

您好,我无法在 2 个 php 请求之间设置简单的等待时间,例如... 我有这个代码(例如):

readfile($link);

访问者请求此 php 代码以下载文件...但在 10 秒内他请求另一个...允许第二个请求(下载)30 秒......知道如何做到这一点吗?在php中......提前谢谢你:)

编辑: 我在下面的帖子的帮助下尝试过,但没有成功

if (!isset($_SESSION['last_download'])) $_SESSION['last_download'] = 0; {
if (time() - $_SESSION['last_download'] > 10){
    $_SESSION['last_download'] = time();
    echo $_SESSION['last_download'];
    }else {echo"".time() - $_SESSION['last_download']."";}}

但它没有保存会话...有什么帮助吗?

【问题讨论】:

  • 我认为检查相同的IP地址可以解决这个问题。但这不是天堂美容的解决方案。

标签: php


【解决方案1】:

但它不保存会话

您是否忘记添加session_start()

试试

<?php

session_start();

if (isset($_SESSION['last_download']))
{
    if (time() - $_SESSION['last_download'] > 10)
    {
        // allow download
        $_SESSION['last_download'] = time();
        echo $_SESSION['last_download'];
    }
    else
    {
        echo time() - $_SESSION['last_download'];
    }
}
else
{
    // session not set yet, set it now
    $_SESSION['last_download'] = time();
}

?>

【讨论】:

  • 你说得对,我忘了开始会话:P 谢谢你的帮助p
【解决方案2】:

只需将上次下载时间保存到会话中

<?php
if (!isset($_SESSION['last_download'])) $_SESSION['last_download'] = 2; //time in past
if ($_SESSION['last_download'] && time() - $_SESSION['last_download'] > 10){
    $_SESSION['last_download'] = time();
    //allow download
}

【讨论】:

  • 请记住,这只会阻止用户在当前会话的时间范围内下载。例如,如果他们打开一个新的浏览器,他们将能够在没有现有阈值的情况下下载文件。这就是为什么最好锁定已登录的帐户,而不是他们的会话。
  • 没问题,因为他必须等待再次搜索搜索...顺便说一句,上面的代码不起作用:/
  • 另外请记住,这不会阻止大多数恶意机器人攻击,因为它们很可能会为每个请求创建一个新会话。
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 2012-02-02
  • 2019-07-20
  • 1970-01-01
  • 2015-08-17
  • 2013-12-13
  • 2018-03-23
  • 1970-01-01
相关资源
最近更新 更多