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


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 定义初始化数组函数
Sep 07 Javascript
js Form.elements[i]的使用实例
Nov 13 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
Jul 07 Javascript
ie中js创建checkbox默认选中问题探讨
Oct 21 Javascript
控制台报错object is not a function的解决方法
Aug 24 Javascript
AngularJS中$interval的用法详解
Feb 02 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
js a标签点击事件
Mar 30 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
Oct 26 Javascript
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
获取下拉列表框的值是数组,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
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
js实现简单贪吃蛇游戏
2020/05/15 Javascript
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
python实现简单猜单词游戏
2020/12/24 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
旅游网创业计划书
2014/01/31 职场文书
品质标语大全
2014/06/21 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
地雷战观后感
2015/06/09 职场文书
升学宴学生致辞
2015/09/29 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
科普 | 业余无线电知识-波段篇
2022/02/18 无线电