【问题标题】:Laravel/PHP multiple form submissions (multiple click on submit button)Laravel/PHP 多表单提交(多次点击提交按钮)
【发布时间】: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) 随机令牌并保存在会话中。

标签: php forms laravel submission


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2012-09-20
    • 2021-08-02
    • 2017-04-26
    相关资源
    最近更新 更多