我似乎无法理解这一点。
我目前有:
$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而不是单一。任何想法都会很棒。
答案 0 :(得分: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";
}
答案 1 :(得分:0)
在返回任何页面之前,但仅在有效请求之前,将session_id,unix_time插入到使用表中。
然后在请求页面时,从使用表中执行选择计数(*),其中session_id = my_session_id和time&gt; time_now-10秒。如果计数大于5,则返回错误消息(系统现在正忙,请等待10秒)。