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


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获取网页中指定节点的父节点、子节点的方法小结
Apr 24 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 Javascript
js简单设置与使用cookie的方法
Jan 22 Javascript
AngularJS基础 ng-readonly 指令简单示例
Aug 02 Javascript
RequireJS简易绘图程序开发
Oct 28 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
Nov 09 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 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
MVC模式的PHP实现
2006/10/09 PHP
用函数读出数据表内容放入二维数组
2006/10/09 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
php中filter_input函数用法分析
2014/11/15 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
php常量详细解析
2015/10/27 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
高效率JavaScript编写技巧整理
2013/08/23 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python WEB应用部署的实现方法
2019/01/02 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
关于运动会广播稿300字
2014/10/05 职场文书
顶岗实习计划书
2015/01/16 职场文书
七年级地理教学计划
2015/01/22 职场文书
领导参观欢迎词
2015/01/26 职场文书
中班下学期个人总结
2015/02/12 职场文书
关于倡议书的范文
2015/04/29 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
python实现三次密码验证的示例
2021/04/29 Python