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


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 相关文章推荐
bcastr2.0 通用的图片浏览器
Nov 22 Javascript
extjs fckeditor集成代码
May 10 Javascript
javascript 随机展示头像实现代码
Dec 06 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
JavaScript更改字符串的大小写
May 07 Javascript
表单验证插件Validation应用的实例讲解
Oct 10 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
Oct 17 Javascript
Angular 如何使用第三方库的方法
Apr 18 Javascript
npm scripts 使用指南详解
Oct 08 Javascript
js编写简易的计算器
Jul 29 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/09/02 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
详解react-redux插件入门
2018/04/19 Javascript
node中的session的具体使用
2018/09/14 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
英国综合网上购物商城:The Hut
2018/07/03 全球购物
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
装潢设计专业推荐信模板
2013/11/26 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
四风问题自查报告剖析材料
2014/02/08 职场文书
老师的检讨书
2014/02/23 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
中药学专业求职信
2014/05/31 职场文书
质量安全标语
2014/06/07 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
Nginx反向代理配置的全过程记录
2021/06/22 Servers
python3操作redis实现List列表实例
2021/08/04 Python