У меня есть некоторые проблемы из-за нескольких представлений формы.
Я использую laravel в качестве фреймворка и создаю браузерную игру (я знаю, есть миллионы) просто для удовольствия.
У меня есть страница для зданий с кнопкой «Построить», которая находится в форме (method = «post»).
Если я удержу Enter в течение 4-5 секунд, будет запущено много запросов, и пользователь сможет создать много записей в базе данных.
Я не хочу единственного исправления на стороне клиента, как
$(document).on('submit', 'form', function() {
$(this).find('button:submit, input:submit').attr('disabled', 'disabled);
});
Так как никогда не доверяй клиенту.
Кто-то здесь с решением (может быть, с Laravel)?
Заранее спасибо.
С наилучшими пожеланиями.
Вы можете управлять им на стороне сервера, используя токен csrf. Ваша форма будет иметь токен для предотвращения подделки межсайтовых запросов, и вы можете получить доступ к этому токену в вашем контроллере для уникальной идентификации клиента. При поступлении запроса на контроллер вы можете проверить, отправляет ли клиент запрос впервые или нет. Если это не первый раз, вы можете вернуться обратно.
Пример:-
public function construct(Request $request){
$token = $request->_token;
//check weather the token already exists or not, using db or session
if(exists){
return;
}
}
«Создайте случайный токен. Поместите токен в сеанс. Поместите токен в форму как скрытое поле. При отправке, если полученный токен равен токену в сеансе, выполните всю работу с базой данных и удалите токен из сеанса.»
«Используя промежуточное ПО для группы маршрутов (laravel.com/docs/5.6/routing#route-group-middleware), вы можете просмотреть :: share (laravel.com/docs/5.6/views#sharing-data-with-all-views) случайный токен и сэкономьте на сессии.
Спасибо @assistbss