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


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 相关文章推荐
jquery使用jxl插件导出excel示例
Apr 14 Javascript
js加减乘除丢失精度问题解决方法
May 16 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
轻松实现js弹框显示选项
Sep 13 Javascript
AngularJS通过$http和服务器通信详解
Sep 21 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
Jan 12 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
Vuex简单入门
Apr 19 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
vue轻量级框架无法获取到vue对象解决方法
May 12 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 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 STRING 陷阱原理说明
2010/07/24 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
js实现简单的打印表格
2020/01/15 Javascript
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python使用fork实现守护进程的方法
2017/11/16 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
python 调试冷知识(小结)
2019/11/11 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Django models文件模型变更错误解决
2020/05/11 Python
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
船舶专业个人求职信范文
2014/01/02 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
早会主持词
2014/03/17 职场文书
公司户外活动总结
2014/07/04 职场文书
社区文艺活动方案
2014/08/19 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
2014年个人总结范文
2015/03/09 职场文书
道歉信范文
2015/05/12 职场文书