Собственно, вот моя функция контроля флуда.
public function StopFlud($user)
{
$search_user =\DB::table('stop_flud')
->where('User_id', $user)->first(); // Ищем пользователя в базе
if(empty($search_user)) // Если пользователя нет в базе, то создаём строку с временем его последней ставки
{
\DB::table('stop_flud')->insertGetId(['User_id' => $user, 'last_date' => time()]);
}
else { // Иначе просто подгружаем ему время последней ставки
if((time()-$search_user->last_date) < 2) // Если прошло меньше 2 секунд c момента его последней ставки, то FALSE
{
return 'false';
}
else
{
\DB::table('stop_flud')
->where('User_id', $user)
->update(['last_date' => time()]);
return 'true';
}
}
}
В итоге, функция не работает. Что я делаю не так? два часа уже над ней сижу
Для ограничения используйте встроенный middleware - trottle. Таким образом можно ограничить количество запросов в заданное время к определённому роуту. При этом ограничение работает для каждого отдельного юзера.
Пример из документации
For example, let's specify that an authenticated user may access the following group of routes 60 times per minute:
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
К роуту применяется два middleware, один из которых - количество запросов в минуту. В данном случае не более 60 в минуту.
В вашем случае примерно так (если группа роутов)
Route::middleware('throttle:1,0.03')->group(function () {
Route::post('/action', 'IndexController@action');
});
Или так, если только один
Route::post('/action', 'IndexController@action')->middleware('throttle:1,0.03');
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости