表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:
点击提交按钮两次。 点击刷新按钮。 使用浏览器后退按钮重复之前的操作,导致重复提交表单。 使用浏览器历史记录重复提交表单。 浏览器重复的HTTP请求。
几种防止表单重复提交的方法
1.禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。
我之前的文章曾说过用一些Jquery插件效果不错。
2.Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。
这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。
3.在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。
如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。
这使你的web应用有了更高级的XSRF保护。
4.在数据库里添加约束。在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。
以上就是这4种方法的介绍了,小伙伴们如果有更好的解决方法,也请告之,本文将持续更新。
如果你想了解React Navigation 5.x的基本的概念,可以查看我之前的发的一篇文章...
按照惯例,先来段废话:CKEditor是新一代的FCKeditor,是一个重新开发的版本。CK...
整除 ASP(VBScript) 中整除用“\”,比如 m = 5 \ 2,结果为 2。 取余 ASP(VBScr...
phpstorm是由JetBrains公司开发的一款功能强大的PHP集成开发工具,可深刻理解用...
说明 本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出. 关于Magicodes.IE ...
复制代码 代码如下: !--[if !IE]!-- 除IE外都可识别 !--![endif]-- !--[if IE] ...
当下,大数据方面的就业主要有三大方向: 一是数据分析类大数据人才, 二是系统...
在刚刚过去的 Flutter Engage 活动上,我们正式发布了 Flutter 2 : 为任何平台创...
前言 有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操...
上传图片有两种方式: 1.fileReader 可以把图片解析成base64码的格式,简单粗暴 ...