`
nully
  • 浏览: 9112 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

防止重复提交表单的方式

 
阅读更多
防止重复提交表单的方式

表单重复提交是在web开发中经常遇到的问题,顾名思义就是指同一个表单用户有意或无意的提交了两次,轻则引起系统数据出现重复,重则引起系统业务逻辑异常,导致系统数据错乱。
一、引起表单重复提交有以下几种常见场景:
1.重复点击提交按钮。包括恶意的连续点击提交按钮,或因为网络慢、服务器处理速度慢等引起的用户多次点击。
2.表单提交处理完后,通过浏览器的后退按钮回到原页面再次点击提交按钮。
3.通过点击浏览器的刷新按钮,导致表单重复提交
4.通过浏览器的历史记录,获取表单提交的URL地址,再次访问

二、解决方式
1.JS脚本方式
JS脚本方式只能限制场景一的多次点击,且须和服务端方式结合使用。JS限制有以下几种方式:
(1)定义全局变量,在form提交前判断是否已有提交过
<script>
	var checkSubmitFlg = false;
	function checkSubmit(){
		if(checkSubmitFlg == true){
			return false;
		}
		checkSubmitFlg = true;
		return true;
	}
</script>

<form action="" onsubmit="return checkSubmit();">
</form>

(2)单击提交按钮后,立刻禁用改按钮
(3)单击提交按钮后,弹出屏蔽层,防止用户第二次点击

2.服务端方式
在打开页面同时生成一个token,存放在session中,同时在页面的form中设置一个隐藏域,表单提交时后端检查session中是否存在该token,存在则立即从session中remove,然后进行正常业务逻辑操作(如业务逻辑操作失败则可再添加该token到session中,方便用户修改数据后再提交),不存在该token则返回重复提交的提示。
服务端方式防止表单重复提交能解决大部分表单重复提交的问题,但是也存在一些缺陷。比如,针对同一个表单快速重复提交的情况并不能准确保证只有一个请求被正常处理;session中存放token只能针对一个表单,如果用户在同一个会话里同事打开多个form表单,则只能正确处理最后一个打开的form页面(可采用在数据库中保存处理过的token替换remove的方式,但该方式性能较差,不推荐采用)。

3.唯一性约束
在数据库中增加唯一性约束限制,这是最有效防止表单重复提交的方式。

三、总结
一般情况下采用JS脚本方式和服务端方式两种结合已可防止表单重复提交,针对特殊业务要求的可采用数据库唯一性约束限制等方式来强制保证业务逻辑上的数据唯一要求。
分享到:
评论

相关推荐

    spring boot 防止重复提交实现方法详解

    Spring Boot 防止重复提交是指在用户提交表单或请求时,防止同一客户端在短时间内对同一 URL 的重复提交,从而避免服务器端的处理压力和数据的一致性问题。下面将详细介绍 Spring Boot 防止重复提交实现方法的相关...

    防止Layui form表单重复提交的实现方法

    下面详细解释几种防止Layui表单重复提交的方法。 首先,在HTML表单中,为了避免在提交时页面刷新导致的重复提交,可以在标签中使用onsubmit="return false;"属性。这个属性的作用是在表单提交时返回false,阻止...

    提交表单后提交禁用提交按钮,防止重复提交

    提交表单后提交禁用提交按钮,防止重复提交.

    javascript方式防止表单重复提交

    8. **表单重定向(Redirect after Post)**:这是一种经典的防止重复提交的方法,提交表单后立即重定向到新的URL,这样即使用户再次点击提交,也会被重定向页面拦截。 9. **使用HTML5的formnovalidate属性**:对于...

    asp.net 页面防止重复提交

    此外,服务器端的事务管理也是防止重复提交的一种方式。在数据库操作中使用事务,确保一系列操作要么全部成功,要么全部失败。这样即使有重复提交,也只会执行一次有效操作。 还可以考虑使用AJAX异步提交,通过...

    防止表单重复提交(asp.net )

    - 使用HTTP-only cookies:存储一个提交标志,当表单提交后设置此标志,后续请求检查该标志以防止重复提交。 - **结合服务器端和客户端验证**:为了增加安全性,通常建议同时在服务器端和客户端进行验证。客户端...

    element-ui如何防止重复提交的方法步骤

    以下是如何在使用Element-UI时防止重复提交的具体方法: 1. 对话框(Dialog)内的表单提交: 错误方案常常是在最后的回调函数中同时隐藏Dialog和恢复提交按钮的可点击性。问题在于Dialog的隐藏是一个动画过程,这...

    防止用户重复提交表单的方法和组件.rar

    好友使用vue技术封装了一个专门用于提交表单和下载文件的“防抖按钮”,其实现原理和使用方法看这里 https://blog.csdn.net/PursueExcellence/article/details/103903139。

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

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

    防止表单重复提交

    通过这样的方式,我们可以在Struts2框架下有效地防止表单重复提交。同时,还可以结合其他策略,如使用AJAX异步提交,进一步增强用户体验。总的来说,防止表单重复提交是一个多层面、多层次的问题,需要综合运用...

    java实现防止表单重复提交

    服务器端避免表单的重复提交,利用同步令牌来解决重复提交的基本原理如下:(1)用户访问提交数据的页面,服务器端在这次会话中,创建一个session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到...

    防止用户表单重复提交处理

    通过前端禁用提交按钮、使用Ajax异步请求,以及后端的Token验证、幂等性设计和事务控制,我们可以有效防止重复提交,确保系统数据的一致性和稳定性。在实际应用中,应根据项目需求和具体技术栈选择合适的方法。

    Struts2防止重复提交解决方案

    在Struts2中,防止重复提交是一个重要的问题,因为它可能导致数据不一致性和服务器资源的浪费。本文将详细介绍如何在Struts2中解决这个问题,以及相关的技术概念。 首先,我们要理解Struts2中的拦截器(Interceptor...

    ASP.NET中防止刷新页面造成表单重复提交

    ### ASP.NET中防止刷新页面造成表单重复提交 在Web应用程序开发中,特别是在使用ASP.NET进行网站构建时,一个常见的问题是表单重复提交。这通常发生在用户通过按下浏览器的F5键来刷新页面的情况下,此时之前的表单...

    防止表单重复提交的方法(简单的token方式)

    防止表单重复提交的方法(简单的token方式),内附实现代码及实现思路。

    修改禁止多次重复提交

    在IT行业中,尤其是在Web开发领域,防止用户多次重复提交数据是一项重要的任务,这可以避免数据库出现冗余数据,保持系统稳定。"修改禁止多次重复提交"这个话题涉及到前端交互、后端处理以及数据库操作等多个层面。...

    struts2 防止表单重复提交的例子

    通过以上方式,Struts2的Token机制有效地防止了表单的重复提交,保证了服务端的处理逻辑正确性和数据的一致性。在实际开发中,结合合理的前端提示,还可以提高用户体验,避免用户因误操作而产生的困扰。

Global site tag (gtag.js) - Google Analytics