问题标签 [double-submit-prevention]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3848 浏览

java - 是否有技术可以防止无状态 Web 应用程序中的重复提交?

我想在现有的 java web 应用程序(实际上是 struts)中实现双重提交预防。架构方面,我们谈论的是 2 到 N 个可能的应用程序服务器(tomcat)和一个单一的数据库服务器(mysql)。各个服务器彼此不认识,无法交换消息。在应用服务器前面有一个负载均衡器,它能够进行粘性会话

所以基本上有两种防止双重提交的客户端和服务器端。如果可能的话,我想去服务器端,因为如果人们在浏览器中禁用 cookie 和/或 javascript,所有客户端技术似乎都会失败。

这让我想到了通过数据库锁进行某种类似互斥的同步。我认为可以计算用户输入数据的校验和并将其保存到专用的数据库表中。在每次提交时,应用程序必须检查是否存在相等的校验和,这表明给定的提交是重复的。当然,必须定期清除此表中的校验和。问题是检查数据库中是否已经存在重复校验和并在没有校验和时插入校验和的整个过程几乎是一个关键部分。因此校验和表必须预先锁定并在该部分之后再次解锁。

当我想到桌锁时,我的僵局瓶颈警钟开始响起。所以我的问题是:有没有更明智的方法来防止无状态 Web 应用程序中的重复提交?

请注意,strutsTokenInterceptor不能在这里应用,因为当 cookie 被禁用时它会失败(它依赖于 HTTP 会话,如果没有会话 cookie,它根本不存在)。

0 投票
2 回答
2763 浏览

jquery - jQuery Disable Enter Key after Enter Key has been hit when Enter key has been disabled

我已经禁用了我的 enter 键,以便我可以进行 ajax 提交,但我想确保如果用户在服务器的响应返回之前两次点击 enter,则表单不会提交两次。

在这里,我禁用了 enter 键并为其分配了一个名为submitForm()

我试图在bind()其他地方再次,但它没有做任何事情。我在不同的地方尝试过preventDefault(),但我认为我要么把它放在错误的地方,要么这样做是错误的。我似乎无法让它工作。

我发现了这个:How to disable Enter/Return Key After a function is executed because it? ,但它没有回答我的问题,因为在发布者的示例中,脚本会检查框中是否有任何内容,但我想检查我是否已提交。我不知道该怎么做。我真正想做的是禁用回车键,直到我收到服务器对 ajax 调用的回复。这是 submitForm():

我宁愿不必在服务器端做任何事情,因为我需要这个提交功能尽可能快(这将是一个快节奏的数据输入表单)。

0 投票
2 回答
8921 浏览

php - 在 CodeIgniter 中插入重复数据

我只是在 pastebin http://pastebin.com/KBtqrAkZ的 codeigniter 控制器部分插入数据

比我的模型部分简单地添加到 pastebin http://pastebin.com/WiLHV2sr

如果我按 ctrl + F5 或 F5 而不是插入数据,我的问题是在重定向之后。我是codeigniter的新手。请帮帮我。任何帮助将不胜感激。

0 投票
3 回答
421 浏览

javascript - 页面重新加载后双重提交

我有以下情况:

第一个网页有一个提交给服务器的表单。服务器响应第二页。第二个页面有一个隐藏的表单,在表单加载时使用 javascript 提交,它将用户重定向到外部站点。

我的问题是:用户是否可以在第一页上两次提交第二个表单(在第一页的一个页面视图内)?

问题与这在实践中如何工作有关,我不需要替代方案。

0 投票
1 回答
674 浏览

ruby-on-rails - rails:ajax避免多个表单提交

我有一个提交按钮,需要确保只按下/提交一次,直到 AJAX 请求完成。在 noScript 的情况下,Javascript 解决方案是不安全的。在 Rails 中是否有适当的方法来做到这一点?

0 投票
1 回答
513 浏览

vb.net - 提交后重定向获取 (PRG) 摘要页面

因此,我阅读了这种称为 PRG 的方法,作为解决表单重复提交问题的一种方法。但是,我还没有找到向用户显示的摘要页面/成功消息的下降实现。我能想到的唯一方法是存储会话变量,但我不希望它在多次刷新时持续存在。它应该显示一次消息/摘要,然后完成。此外,如果用户不能返回到先前提交的页面,那将是理想的。

这是我的 PRG 代码:

问题是,如何在直接由提交产生的​​重定向上显示此消息,最好不要进一步刷新?或者只是简单地显示消息而不考虑刷新,无论是最简单和最有意义的。谢谢 ;)

0 投票
1 回答
4082 浏览

python - WTForms 在刷新 flask-wtf 时双重 POST 提交预防

我使用带有 Flask-WTF 扩展的 WTForms 和 Flask

我的表格如下所示:

Jinja2 模板:

呈现形式:

是否可以在不更改表单“操作”并进行重定向的情况下防止在浏览器刷新按钮单击时提交双重表单?

0 投票
1 回答
1770 浏览

forms - 如何在 GWT 中实现服务器端防止双重提交?

我正在构建一个带有很多表单的 GWT 应用程序。我正在使用 gwt-platform 及其调度模块。

我的下一步是防止在服务器端重复提交。问题是我不知道该怎么做...

我想到了这样的事情:

  1. 当应用程序加载时,服务器会向客户端提供一些生成的令牌
  2. 服务器将令牌存储在 HTTPSession 中
  3. 当客户端提交表单时,它将从 (1.) 发送令牌以及表单
  4. 服务器检查 HTTPSession 中发送的令牌是否 == 令牌
  5. 在对客户端的回答中,它将发送一个新令牌

将令牌存储在 HTTPSession 中是否安全?或者我应该简单地在服务器上创建一个从 SESSION_ID 映射到生成的令牌的 HashMap?

或者也许已经在 GWT 或 gwt-platform 或其他地方实现了它?

谢谢

0 投票
8 回答
31109 浏览

jsf - JSF中如何防止双击

我们有一些针对大量数据运行的搜索页面,需要一段时间才能完成。当用户点击搜索按钮时,我们不希望他们再次提交搜索结果。

是否有在 JSF 中进行“双击”检测/预防的最佳实践?

PrimeFaces 组件似乎可以做我们想做的事,因为它会在单击搜索按钮和搜索完成之间的一段时间内禁用 UI,但是我们可以使用更通用的策略(也许不是依赖于 PrimeFaces)?理想情况下,在搜索完成之前,对该按钮的任何点击都将被禁用或忽略。我们不一定需要禁用整个 UI(因为 blockUI 允许您这样做)。

0 投票
0 回答
512 浏览

forms - 表单仅在 IE 上提交两次

我有一个jsp 登录表单页面,它使用stripes:submit 按钮调用ActionBean 方法以及stripes:submit 按钮上的OnClick() javascript 函数来提交登录表单。在这种情况下,IE8 浏览器会发送两次请求。它适用于 FF 和 Chrome 等其他浏览器。有什么办法可以防止它。

提前感谢您的帮助。

问候,

纳米