【问题标题】:Stopping Duplicate Submission or Double Click Submission停止重复提交或双击提交
【发布时间】:2013-11-22 04:13:46
【问题描述】:

首先,我意识到还有其他问题与这个问题类似,但它们不包含任何对我的问题的明确解决方案。

当客户提交订单时,我需要能够正确防止我的处理脚本针对该特定订单运行多次。

/payment - 客户填写所有详细信息并提交订单

/process_order - 收集所有数据并处理订单。

发生的情况是我的订单被部分处理,然后再次完全处理......我只能假设这是因为客户要么双击提交按钮,要么再次单击提交按钮时间,因为该过程尚未完成,浏览器尚未重定向到“谢谢”页面...

我可以在第一次点击事件时使用 jQuery 来禁用按钮,但我也想知道我可以在服务器端做些什么来防止这种情况发生。

【问题讨论】:

    标签: php forms laravel form-submit


    【解决方案1】:

    一种可能的解决方案本质上是为您的表单创建一个 nonce 令牌,并在显示表单时将其存储在会话中。

    $_SESSION['formNonce'] = md5( time() . uniquid() );
    

    生成表单时,将其添加为隐藏字段:

    <input type="hidden" name="formNonce" value="<?php echo($_SESSION['formNonce']); ?>">
    

    然后在处理它时,您要做的第一件事是验证 nonce 是否在会话中,然后将其删除。这样,第二次提交将不会通过验证,因为 nonce 令牌已被删除。

    对所有这些都会进行一些调整和错误检查,但加上禁用 javascript 按钮可能是一个可行的解决方案。

    【讨论】:

      【解决方案2】:

      例如,您可以使用“防伪令牌”方法。一旦用户确实访问了一个页面,就会分配一个令牌。首次尝试提交页面将从有效列表中删除令牌,因此进一步的尝试将失败。

      【讨论】:

      • 你能举个例子吗?
      • 我已经多次看到这个答案,除了一般陈述之外,它没有告诉我任何其他信息。我需要一些有意义的例子......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 2011-03-12
      相关资源
      最近更新 更多