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


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 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
Apr 23 Javascript
深入document.write()与HTML4.01的非成对标签的详解
May 08 Javascript
jquery+正则实现统一的表单验证
Sep 20 Javascript
jquery+php实现滚动的数字特效
Nov 29 Javascript
JS实现的几个常用算法
Nov 12 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
Vue2.0 vue-source jsonp 跨域请求
Aug 04 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
对angular4子路由&辅助路由详解
Oct 09 Javascript
js回调函数仿360开机
Dec 26 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
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
jquery中动态效果小结
2010/12/16 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
python插入排序算法的实现代码
2013/11/21 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
python绘制圆柱体的方法
2018/07/02 Python
django将数组传递给前台模板的方法
2019/08/06 Python
keras slice layer 层实现方式
2020/06/11 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
写求职信有哪些注意事项
2014/05/08 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
创新社会管理心得体会
2014/09/12 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
基于docker安装zabbix的详细教程
2022/06/05 Servers