如何处理双重提交表格?

时间:2013-04-15 09:11:31

标签: java jsp

如何处理用户可能不小心点击提交按钮多次的情况?如果它发生,那么将在表中生成两行。如何避免它。  我在JSP工作。

还要避免导致在数据库中出现双重输入问题的back按钮和refresh页面。

7 个答案:

答案 0 :(得分:2)

几种方式:

  1. 您可以使用javascript在提交按钮中禁止两个cliks,但如果用户在两次点击之间使用导航器的“后退”按钮,它就不起作用。

  2. 在服务器端,您可以发送在用户会话中保留唯一ID的表单(也可用于CSRF计量表)。然后,在提交表单时,您可以比较然后删除用户会话中的ID。对同时访问会话(每个请求都有自己的线程)是好事。

  3. 在数据库中检测,但它取决于数据及其约束。第2点的一个扩展是将表单的生成ID保留在数据库中,并在第一次访问期间将其删除。这种方法的优点是在并发访问的情况下使用事务支持。

  4. 如果表单更新了数据库中的特定条目(行ID与表单一起发送),则可以认为问题本身已解决,因为它使用相同的数据更新同一行的两倍。

答案 1 :(得分:1)

首先,在客户端,一旦用户点击它就立即禁用该按钮。

其次,在服务器端,该表单中的某些信息将成为数据库表中的主键。因此,当在插入数据时再次向服务器发送相同的信息时,您将获得异常,因为主键的重复值不会重复。

答案 2 :(得分:1)

如果你想100%确定无法点击提交按钮两次,你可以在按钮的onclick =方法的javascript中禁用它。

例如,在下面的javascript(jquery)中,如果按钮ID为'send'...

$('#send').click(function(e) {
    this.disabled = true;
    businessLogicCall();
});

答案 3 :(得分:1)

第一个解决方案。禁用提交按钮..如果可能,请再次单击某个唯一键...

答案 4 :(得分:1)

我建议永远不要太依赖任何客户端。使用非常易于使用的工具,您几乎可以更改客户端强制执行的任何行为。如果您的应用程序在客户端失败后崩溃/有未定义的行为,您应该更改您的应用程序。

你可以做的一件事就是创建一个获取此POST产生的所有字段的类,覆盖它的equals()方法来表示所有字段,在用户级别保存请求并将所有其他传入请求与您已经为该用户提出的请求列表。

然后,您可以在成功处理后立即删除请求对象。

另一方面,如果您以某种方式再次获得用户的相同请求(通过在用户发出请求时查看“打开”请求列表),您可以忽略它。

答案 5 :(得分:0)

等待时间不再接受按钮,例如禁用提交按钮。

答案 6 :(得分:0)

禁用提交按钮,直到用户更改输入信息,从而显示他想要提交另一部分信息。