表单防止重复提交


日常开发中,增删改查的需求不可避免,表单提交业务不知凡几,防止表单重复提交势在必行,引起重复提交的情况如下:

1、提交按钮误操作点击两次

2、后端网络请求响应缓慢

3、点击提交后的刷新按钮

4、浏览器后退按钮,重复提交表单

5、浏览器重复的HTTP请求

我们可以从前端和服务端拦截重复提交的操作。

项目:https://gitee.com/chenershuai/jsp-spring.git

一、前端拦截

1.1 提交按钮不可用

1、表单提交后javascript 禁用提交按钮,或者表单提交后解绑按钮上click事件

1.2 按钮倒计时

页面提交表单后,提交按钮置灰不可点击加入倒计时,比如5秒或者10秒后恢复可提交状态

1.3 ajax提交加锁

采用ajax方式提交表单时,设置一个布尔变量(true/false),未提交前设置为true,提交后设置为false,服务端响应结果没有回来之前保持false,正常响应时再置为true。

1.4 提交后重定向到一个提交成功的页面

表单提交后跳转到另外一个成功页面。用户刷新避免重复提交.

具体代码见项目中com.example.ReSubmitController#savePRG

二、后端拦截

2.1 token

用户访问表单页面,服务器生成 token 存入session和request中,token放入页面 hidden 标签中;提交表单时服务器比对页面参数token和session中token,如果一致,提交表单数据并删除session中的token值; 如果重复提交了,token不一致,提示不可重复提交。

2.2 Cookie 记录token

和session中存储token类似

2.3 缓存

缓存提交数据,比对下一次提交的数据,如果一致,则为重复提交

2.5 数据库添加唯一索引约束

数据库唯一性限制重复提交

三、分布式下后端拦截

3.1 锁

其实是锁加缓存

3.2 数据库添加唯一索引约束

数据库唯一性限制重复提交

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值