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


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 相关文章推荐
js setattribute批量设置css样式
Nov 26 Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 Javascript
JS实现左右无缝轮播图代码
May 01 Javascript
Bootstrap Fileinput文件上传组件用法详解
May 10 Javascript
javascript中call,apply,bind函数用法示例
Dec 19 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
Jan 11 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
详解Vue底部导航栏组件
May 02 Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 Javascript
javascript实现点击产生随机图形
Jan 25 Javascript
详解JavaScript中Arguments对象用途
Aug 30 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
转PHP手册及PHP编程标准
2006/12/17 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
计算php页面运行时间的函数介绍
2013/07/01 PHP
php中session定期自动清理的方法
2015/11/12 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
django中使用事务及接入支付宝支付功能
2019/09/15 Python
python多进程间通信代码实例
2019/09/30 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
三下乡个人总结
2015/03/04 职场文书
烈士陵园观后感
2015/06/08 职场文书
推广普通话主题班会
2015/08/17 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers