0

我似乎无法理解这一点。

我目前有:

$checkRunningSQL = $odb -> prepare("SELECT time,date FROM `api` WHERE `key` = :key  AND `time` + `date` > UNIX_TIMESTAMP()");
$checkRunningSQL -> execute(array(':key' => $_GET['key']));
$countRunning = $checkRunningSQL -> fetchAll();
$stillrunning = ($countRunning[0][time] + $countRunning[0][date]) - time();
if($stillrunning >= 1)
{
echo '<p><strong>ERROR: </strong>You currently have more than your allocated running.</p>';
die();
}

这当前检查如下表:

在此处输入图像描述

如果他们有 1 个当前正在运行,这将正常工作。但是我想对每个键进行限制。刚才如果他们有一个当前正在运行的说有 10 秒,那么在这 10 秒结束之前,他们无法启动另一个。但我想要的是让他们可以启动 5,如果他们尝试启动 6,它会回显错误。

当他们请求页面时,他们指定参数,然后将这些参数输入 MySQL:

$insertLogSQL = $odb -> prepare("INSERT INTO `api` VALUES (:key, :ip, :port, :time, :method, UNIX_TIMESTAMP())");
$insertLogSQL -> execute(array(':key' => $_GET['key'], ':ip' => $_GET['host'], ':port' => $_GET['port'], ':time' => $_GET['time'], ':method' => $_GET['method']));

我似乎无法理解如何将它们限制为 5 个而不是一个。对此提出的任何想法都会很棒。

4

2 回答 2

1

您能否(在插入之前)检查 API 密钥的当前运行实例数量?就像是:

$SESSION_LIMIT = 5;
$precheck = $odb->prepare("SELECT count(*) AS `active_sessions` FROM `api` WHERE `key` = :key AND (UNIX_TIMESTAMP() BETWEEN date AND (date + time))");
$precheck->execute(array(':key' => $_GET['key']));
if (($result = $precheck->fetch()) && $result['active_sessions'] >= $SESSION_LIMIT) {
    // too many sessions
    echo "Can't create any more sessions at this time";
}
于 2013-06-25T02:44:54.913 回答
0

在返回任何页面之前,但仅限于有效请求,将 session_id、unix_time 插入使用表。

然后在请求页面时,从使用表中选择计数(*),其中 session_id=my_session_id 和 time>time_now-10 秒。如果计数大于 5,则返回错误信息(系统现在正忙,请等待 10 秒)。

于 2013-06-25T02:34:30.977 回答