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


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 相关文章推荐
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
Sep 04 Javascript
jquery实现通用的内容渐显Tab选项卡效果
Sep 07 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
理解JavaScript原型链
Oct 25 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
js获取json中key所对应的value值的简单方法
Jun 17 Javascript
详解webpack进阶之loader篇
Aug 23 Javascript
实现div内部滚动条滚动到底部和顶部的代码
Nov 15 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 Javascript
前端学习——JavaScript原生实现购物车案例
Mar 31 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命名空间(Namespace)的使用详解
2013/05/04 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
基于postman获取动态数据过程详解
2020/09/08 Javascript
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
详解Python3的TFTP文件传输
2018/06/26 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
Python内置函数locals和globals对比
2020/04/28 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
销售类个人求职信范文
2013/09/25 职场文书
新闻专业推荐信范文
2013/11/20 职场文书
文明班集体申报材料
2014/05/23 职场文书
优秀党员申报材料
2014/12/18 职场文书
Python3的进程和线程你了解吗
2022/03/16 Python