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


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通过Ajax访问XML数据的小例子
Nov 18 Javascript
一个可以增加和删除行的table并可编辑表格中内容
Jun 16 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
全面了解javascript中的错误处理机制
Jul 18 Javascript
jQuery实现的自定义弹出层效果实例详解
Sep 04 Javascript
Vue2.2.0+新特性整理及注意事项
Aug 22 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
vue中使用input[type="file"]实现文件上传功能
Sep 10 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
用JavaScript实现贪吃蛇游戏
Oct 23 Javascript
一文了解JavaScript用Element Traversal新属性遍历子元素
Nov 27 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
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
PHP内核探索:变量概述
2014/01/30 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
Less 安装及基本用法
2018/05/05 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
Django 再谈一谈json序列化
2020/03/16 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
世界经理人咨询有限公司面试
2014/09/23 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
个性发展自我评价2015
2015/03/09 职场文书
培训通知书模板
2015/04/17 职场文书
违纪开除通知书
2015/04/25 职场文书
海上钢琴师观后感
2015/06/03 职场文书
MySQL 语句执行顺序举例解析
2022/06/05 MySQL