Laravel/PHP 多表单提交(多次点击提交按钮)
Posted
技术标签:
【中文标题】Laravel/PHP 多表单提交(多次点击提交按钮)【英文标题】:Laravel/PHP multiple form submissions (multiple click on submit button) 【发布时间】:2018-03-23 16:43:22 【问题描述】:由于提交了多个表单,我遇到了一些问题。 我使用 laravel 作为框架并创建一个浏览器游戏(我知道,有数百万)只是为了好玩。
我有一个带有“Construct”按钮的建筑物页面,该按钮采用表单(method =“post”)。
如果我按住 Enter 4-5 秒,将会触发许多请求,并且用户可以在数据库中创建许多记录。
我不想要像这样的唯一客户端修复
$(document).on('submit', 'form', function()
$(this).find('button:submit, input:submit').attr('disabled', 'disabled);
);
因为永远不要相信客户。
这里有人有解决方案吗(也许用 laravel)?
提前致谢。
最好的问候。
【问题讨论】:
生成随机令牌。将令牌放入会话中。将令牌作为隐藏字段放入表单中。如果收到的令牌等于会话中的令牌,则在提交时执行数据库中的所有内容并从会话中删除令牌。 所以,我总是生成一个表单令牌并将其保存到会话中。而且每个表单都有一个包含此标记的隐藏输入字段,对吧? 将中间件用于路由组 (laravel.com/docs/5.6/routing#route-group-middleware) 您可以查看::share (laravel.com/docs/5.6/views#sharing-data-with-all-views) 随机令牌并保存在会话中。 【参考方案1】:您可以使用 csrf 令牌在服务器端对其进行控制。您的表单将有一个用于防止跨站点请求伪造的令牌,您可以在控制器中访问此令牌以唯一标识客户端。当请求到达控制器时,您可以检查客户端是否第一次发送请求。如果不是第一次,您可以返回。 示例:-
public function construct(Request $request)
$token = $request->_token;
//check weather the token already exists or not, using db or session
if(exists)
return;
【讨论】:
有问题。 CSRF-Token 将为每个会话而不是每个请求创建。只有当我在会话中生成一个随机令牌并将发布请求作为@assistbss 提到的隐藏输入发送时,您的示例才有可能。或者你有另一种方法,也许是 Laravel 特有的?谢谢。【参考方案2】:“生成一个随机令牌。将令牌放入会话中。将令牌作为隐藏字段放入表单中。如果收到的令牌等于会话中的令牌,则在提交时执行数据库中的所有内容并从会话中删除令牌。”
“使用路由组中间件 (laravel.com/docs/5.6/routing#route-group-middleware) 你可以查看::share (laravel.com/docs/5.6/views#sharing-data-with-all -views) 一个随机令牌并保存在会话中。"
感谢@assistbss
【讨论】:
以上是关于Laravel/PHP 多表单提交(多次点击提交按钮)的主要内容,如果未能解决你的问题,请参考以下文章
Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据
Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据