`

防止表单重复提交的几种策略

 
阅读更多
防止表单重复提交的几种策略



表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:

点击提交按钮两次。
点击刷新按钮。
使用浏览器后退按钮重复之前的操作,导致重复提交表单。
使用浏览器历史记录重复提交表单。
浏览器重复的HTTP请求。
几种防止表单重复提交的方法

禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。

我之前的文章曾说过用一些Jquery插件效果不错。

Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。

如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

这使你的web应用有了更高级的XSRF保护。

在数据库里添加约束。在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。

你是如何克服数据重复提交问题的?你遇到过什么重复提交数据的现实例子吗?

转自:http://www.oschina.net/news/45877/prevent-duplicate-form-submission?p=2#comments
分享到:
评论

相关推荐

    防止表单重复提交

    防止表单重复提交的常见策略有以下几种: 1. **客户端验证**:在JavaScript中,可以监听表单提交事件,一旦表单提交,禁用提交按钮,防止用户再次点击。但这种方法并不完全可靠,因为JavaScript可以被禁用,或者...

    springboot2.1+redis+拦截器 防止表单重复提交

    在现代Web应用开发中,防止表单重复提交是一项重要的任务,因为这可能导致数据不一致性和服务器资源浪费。本文将深入探讨如何使用Spring Boot 2.1、Redis和拦截器来实现这一功能。以下是对这个主题的详细解释: ...

    几种防止表单重复提交的方法

    以下是几种防止表单重复提交的策略,它们可以在不同的应用场景中发挥作用。 1. 禁用提交按钮 在表单提交之后,通过JavaScript使提交按钮变为不可用状态。这种方法简单,可以在用户提交表单后立即阻止他们再次点击...

    sturts2防止表单的重复提交 token

    总的来说,Struts2的Token机制是一种有效防止表单重复提交的方法,它通过生成和验证唯一标识来确保每个请求的唯一性,从而保护了业务的正确性和数据的一致性。在实际开发中,根据项目需求和安全策略,我们可以灵活...

    struts数据回显、模型驱动、防止表单重复提交

    Struts提供了几种防止表单重复提交的方法: - token机制:服务器在处理表单请求前生成一个唯一的token,并将其存储在session中,同时将token添加到表单隐藏字段。当表单提交时,服务器检查session中的token是否已...

    表单重复提交问题1

    每种策略都有其适用场景,开发者应根据实际需求选择合适的方法来防止表单重复提交,确保系统数据的一致性和完整性。在开发过程中,测试这一场景至关重要,以确保用户的操作不会对系统造成意外影响。

    Struts2防止表单重复提交示例

    在Struts2中防止表单重复提交的过程主要包括以下几个步骤: 1. **生成Token**:当用户发起表单请求时,服务器会生成一个唯一的Token并将其存储在服务器的会话(Session)中,同时将这个Token作为隐藏字段放入到HTML...

    Servlet、Struts、SpringMVC对于表单重复提交的解决方案

    以下将详细探讨这三种框架如何防止表单重复提交。 ### Servlet 在Servlet中,通常采用几种方法来避免重复提交: 1. **Session状态管理**:在接收到用户提交请求后,可以在Session中设置一个标志,如"form...

    PHP实现防止表单重复提交功能【基于token验证】

    总之,PHP通过基于token的验证可以有效地防止表单重复提交,但需要根据具体的应用场景和需求进行优化和调整。在实际开发中,还可以结合其他策略,如记录提交状态、使用cookie等,以提供更全面的防护。

    struts2防止重复提交

    Struts2提供了几种策略来防止表单的重复提交,确保请求的唯一性和事务的一致性。 一、令牌(Token)机制 Struts2的Token插件是防止重复提交的一种常见方法。这里的"Strut2Token"很可能是指这个插件的应用。它的...

    truts2防止重复提交共2页.pdf.zip

    Truts2提供了几种防止重复提交的方法: 1. **令牌(Token)机制**:Truts2的令牌拦截器(TokenInterceptor)是常用的防御手段。它会在用户提交表单时生成一个唯一的令牌,将其存储在session中,并附加到表单隐藏...

    重复提交和回发或回调参数无效问题

    为了有效防止表单重复提交,可采用以下几种策略: 1. **Token机制**:每次提交表单前生成一个唯一的Token,并将其存储在Session中,同时将Token的值作为隐藏字段附带在表单中。服务器端验证提交的Token是否有效,若...

    JAVA防止重复提交Web表单的方法

    在Java中,通常有几种方法来处理这个问题,本文将重点介绍一种基于令牌(Token)的防止重复提交Web表单的方法。 首先,我们需要理解为什么需要防止重复提交。当用户在提交表单时,由于网络延迟或用户误操作,可能会...

    Struts高级部分(1)(解决重复提交、上传组件)

    Struts通过几种策略来解决这个问题: 1. **令牌(Token)机制**:在用户提交表单时,服务器会生成一个唯一的令牌并将其存储在用户的会话(session)中,同时将令牌隐藏字段放入表单。当用户再次提交表单时,服务器...

    JSP防止网页刷新重复提交数据的几种方法

    在网页开发中,尤其是涉及到数据提交的场景,防止用户意外或恶意重复提交是非常重要的,因为这可能导致数据不一致和系统异常。JSP(JavaServer Pages)作为动态网页技术,提供了多种方式来解决这个问题。以下是一些...

    一直复略了的一个问题,关于表单重复提交

    综上所述,防止表单重复提交是一个多层面的问题,需要结合客户端和服务器端的策略来确保数据的完整性和一致性。选择哪种方法取决于应用场景和安全性要求。在实际开发中,通常会结合多种方法来提供更全面的防护。记住...

    防止页面二次刷新

    为了解决这个问题,开发者可以采取以下几种策略: 1. **POST-REDIRECT-GET**(PRG)模式:这是一种常见的防止二次提交的方法。在用户提交表单后,服务器接收请求并处理,然后通过HTTP状态码303或302重定向到一个新...

    通过location.replace禁止浏览器后退防止重复提交

    - 防止表单重复提交:在用户点击提交按钮后,使用`location.replace`跳转到新的页面,避免用户刷新页面或误操作导致的重复提交。 3. **实际应用**: 如描述中所示,有两种常见的方式使用`location.replace`: - ...

    WEB 前端开发中防治重复提交的实现方法

    为了防止重复提交,我们可以采取以下几种策略: 1. 在提交前立即禁用提交按钮。这是一种常用的方法,通过将按钮设置为不可点击状态来阻止重复提交。例如: ```javascript $("input[type='submit']").click...

    关于页面刷新,事件重复提交的方法分享

    针对这个问题,开发者通常可以采取以下几种策略: 1. **参数清空**:在事件处理完成后,将表单的输入字段清空,以防止用户刷新时数据仍然存在。然而,这种方法并不奏效,因为刷新页面时,浏览器发送的是原始的POST...

Global site tag (gtag.js) - Google Analytics