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


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代码
Oct 09 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
浅析ajax请求json数据并用js解析(示例分析)
Jul 13 Javascript
js实现有时间限制消失的图片方法
Feb 27 Javascript
jQuery替换textarea中换行的方法
Jun 10 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
Sep 05 Javascript
js设置和获取自定义属性的方法
Oct 20 Javascript
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
使用vue-cli webpack 快速搭建项目的代码
Nov 21 Javascript
js canvas画布实现高斯模糊效果
Nov 27 Javascript
js利用iframe实现选项卡效果
Aug 09 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
再说下636单管机
2021/03/02 无线电
zend framework重定向方法小结
2016/05/28 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
js初始化验证实例详解
2016/11/26 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
js防抖和节流的深入讲解
2018/12/06 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
python写的一个文本编辑器
2014/01/23 Python
Python环境变量设置方法
2016/08/28 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
python之消除前缀重命名的方法
2018/10/21 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Python socket模块方法实现详解
2019/11/05 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
经典演讲稿范文
2013/12/30 职场文书
村官学习十八大感想
2014/01/15 职场文书
考试不及格的检讨书
2014/01/22 职场文书
就业自我评价
2014/02/04 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
语文复习计划
2015/01/19 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python