Я строю веб-приложение контроллера модели для просмотра, и я хочу создать механизм спама запроса, почему? Позвольте мне вкратце объяснить:PHP запрос механизм предотвращения спама
Мы получили контроллер ajax, каждый пользовательский ввод получен через ajax, без прямого $ _POST в моем веб-приложении.
Давайте представим несколько действий контроллера Ajax, где мы хотим поставить механизм предотвращения спама на:
class AjaxController{
private function setPrevention($interval){
$latestActionRequest = $_SESSION['requests'][$this->action];
if($prevention === null){
$_SESSION['requests'][$this->action] = array('latest' => microtime(), 'interval' => $interval
} else {
// Calc difference here, and check if the interval was within range, else
// the user was requesting the action method to quickly.
}
}
public function _postComment(){
$this->setPrevention(1000);
// Apply validation, on the $_POST array, insert the to database.
}
}
Таким образом, мы получили действие, чтобы оставить комментарий, мы только хотим, чтобы позволить пользователю размещать комментарий каждую секунду, поэтому мы применяем очень простой профилактический mecanisch в нашей сессии.
Отметьте в методе setPrevention. У меня есть 2 вопроса, мой первый вопрос, этот механизм - хорошая идея? Или есть альтернативные способы улучшения?
Второй вопрос: как проверить, был ли последний запрос в диапазоне интервалов? С microtime - microtime Я получаю разницу в секундах, но есть действия, когда я хочу применить интервал 500 мс.
То, что я получил до сих пор:
$_SESSION['requests']['postComment'] = array('latest' => microtime(true), 'interval' => 1000);
$difference = ($_SESSION['requests']['postComment'] - microtime(true));
В этой точке $ Разница возвращает поплавок (106,984388113) (ждали 106 секунд) Но мы хотим, чтобы получить разницу в микропоры, потому что наш интервал 1000 (который 1 секунда не 1000)
Надеюсь, мой вопрос был ясен, спасибо за помощь.
Пересмотрены мои ответы на ваши изменения. – Chris