常见表单重复提交问题整理及解决方法


Posted in Javascript onNovember 13, 2013

/**
*
* @authors Benjamin
* @date 2013-11-13 10:16:59
*/

一、常见的重复提交问题
a>点击提交按钮两次。
b>点击刷新按钮。
c>使用浏览器后退按钮重复之前的操作,导致重复提交表单。
d>使用浏览器历史记录重复提交表单。
e>浏览器重复的HTTP请求。

二、防止表单重复提交的方法

a>禁掉提交按钮。表单提交后disabled现在的按钮或者取消该按钮的点击事件或者默认事件。这种方法防止心急的用户多次点击按钮。但有个问题,如果在客户端把Javascript给禁止掉,这种方法就无效了,当然现代的web站点来说,应该很少了。

b>Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

c>使用cookie处理表单重复提交

PHP中的实现:

lt;?php 

 if(isset($_POST['go'])){ 

 setcookie("tempcookie","",time()+30); 

 header("Location:".$_SERVER[PHP_SELF]);exit(); 

 } if(isset($_COOKIE["tempcookie"])){ 

 setcookie("tempcookie","",0);echo "您已经提交过表单"; 

 } 

 ?>

d>在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。这使你的web应用有了更高级的XSRF保护。

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

Javascript 相关文章推荐
用于节点操作的API,颠覆原生操作HTML DOM节点的API
Dec 11 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
javascript 获取图片尺寸及放大图片
Sep 04 Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 Javascript
javascript实现无限级select联动菜单
Jan 02 Javascript
javascript实现的闭包简单实例
Jul 17 Javascript
AngularJS  双向数据绑定详解简单实例
Oct 20 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
JavaScript实现修改伪类样式
Nov 27 Javascript
自己动手封装一个React Native多级联动
Sep 19 Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
Sep 18 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 #Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 #Javascript
jquery validate在ie8下的bug解决方法
Nov 13 #Javascript
JQuery伸缩导航练习示例
Nov 13 #Javascript
JS:window.onload的使用介绍
Nov 13 #Javascript
JQuery each打印JS对象的方法
Nov 13 #Javascript
Jquery 数组操作大全个人总结
Nov 13 #Javascript
You might like
php文档更新介绍
2011/07/22 PHP
php中Smarty模板初体验
2011/08/08 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python中的Classes和Metaclasses详解
2015/04/02 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
python协程之动态添加任务的方法
2019/02/19 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Python列表的切片实例讲解
2019/08/20 Python
python实现扫雷游戏
2020/03/03 Python
分享一个python的aes加密代码
2020/12/22 Python
大专计算机个人求职的自我评价
2013/10/21 职场文书
个人求职信范文分享
2013/12/13 职场文书
小班重阳节活动方案
2014/02/08 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
扬尘污染防治方案
2014/06/15 职场文书
党委领导班子整改方案
2014/09/30 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
千万级用户系统SQL调优实战分享
2022/03/03 MySQL