如何防止表单重复提交
如何防止表单重复提交
如何防止表单重复提交一、有很多的应用场景都会遇到重复提交问题,比如:
1、点击提交按钮两次。
2、点击刷新按钮。
3、使用浏览器后退按钮重复之前的操作,导致重复提交表单。
4、使用浏览器历史记录重复提交表单。
5、浏览器重复的 HTTP 请求。
二、防止表单重复提交的方法
1、禁掉提交按钮
表单提交后使用 Javascript 使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把 Javascript 给禁止掉,这种方法就无效了。
2、Post/Redirect/Get 模式
在提交后执行页面重定向,这就是所谓的 Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。
这能避免用户按 F5 导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。
3、在 session 中存放一个特殊标志
当表单页面被请求时,生成一个特殊的字符标志串,存在 session 中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从 session 中删除它,然后正常处理数据。如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。这使你的 web 应用有了更高级的 XSRF 保护。
4、使用Cookie处理
使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单。
5、在数据库里添加约束
在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。
- 如何获取html5表单中的元素的值(html5 datalist 选中option选项后的触发事件)
- vue表单上传图片数据(vue-cropper插件实现图片截取上传组件封装)
- laravel怎么返回指定列(laravel-admin解决表单select联动时,编辑默认没选上的问题)
- SqlServer 表单查询问题及解决方法(SqlServer 表单查询问题及解决方法)
- js获取子表单所有数据(JavaScript实现异步提交表单数据)
- 如何禁止按回车键提交表单
- laravel数据绑定(laravel-admin表单提交隐藏一些数据,回调时获取数据的方法)
- uniapp 动态表单(详解uniapp无痛刷新token方法)
- laravel验证码依赖(laravel5.2表单验证,并显示错误信息的实例)
- dedecms标签怎么调用(Dedecms自定义表单“数据校验不对,程序返回错误”的解决方法)
- php 处理html表单(PHP使用HTML5 FormData对象提交表单操作示例)
- thinkphp表单提交不到数据(ThinkPHP5.1表单令牌Token失效问题的解决)
- html5新的表单元素新的特性(HTML5表单验证特性知识点小结)
- react动态添加组件属性(react使用antd的上传组件实现文件表单一起提交功能完整代码)
- python怎么实现链表(Python实现数据结构线性链表单链表算法示例)
- 怎么调用dede自定义表单(DEDE实现转跳属性文档在模板上调用出转跳地址)
- 菲律宾旅游攻略(菲律宾旅游攻略地图)
- 清华大学难考吗(清华大学考研录取分数线)
- 观花盆栽佛肚竹盆景制作及养护(观花盆栽佛肚竹盆景制作及养护)
- 春天养佛肚竹,做好这几件事,叶绿根壮寓意好 越养越旺家(春天养佛肚竹做好这几件事)
- 律界衣品最好,时尚圈学识数高,41岁的Amal堪称现实版的傲骨贤妻(时尚圈学识数高)
- 刘智泰确认出演《Good Wife》 担纲男一号(刘智泰确认出演Good)
热门推荐
- css实现水平垂直居中的方式有哪些(css让容器水平垂直居中的7种方式)
- SVN提交时忽略bin和obj文件夹
- navicat配置远程访问mysql(解决Navicat无法连接 VMware中Centos系统中的 MySQL服务器的问题)
- sqlserver中根据类型分组(SQL SERVER 分组求和sql语句)
- 如何在cmd里开启mysql(Windows下通过cmd进入DOS窗口访问MySQL数据库)
- 云服务器租用的因素(云服务器租用都需要注意什么?如何选择好的云服务器商?)
- phpstudyv8.0部署多站点(phpstudy v8.1 全站301重定向设置教程)
- html5长按动画效果(HTML5实现移动端弹幕动画效果)
- nginx的最大并发(nginx限制并发连接请求数的方法)
- python中怎么实现队列的创建(python 堆和优先队列的使用详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9