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


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 相关文章推荐
创建一个复制UBB软件信息的链接或按钮的js代码
Jan 06 Javascript
一个简单的瀑布流效果(主体形式自写)
May 27 Javascript
Jquery获取复选框被选中值的简单方法
Jul 04 Javascript
js变量、作用域及内存详解
Sep 23 Javascript
Angular2内置指令NgFor和NgIf详解
Aug 03 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 Javascript
json的结构与遍历方法实例分析
Apr 25 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
Jul 27 Javascript
微信小程序删除处理详解
Aug 16 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
JS如何实现动态添加的元素绑定事件
Nov 12 Javascript
JS实现吸顶特效
Jan 08 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
Protoss魔法科技
2020/03/14 星际争霸
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
校园报刊亭创业计划书
2014/01/02 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
小学教师师德反思
2014/02/03 职场文书
需求分析说明书
2014/05/09 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
联村联户简报
2015/07/21 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python