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


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 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
TextArea不支持maxlength的解决办法(jquery)
Sep 13 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
js简单实现用户注册信息的校验代码
Nov 15 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
jQuery实现统计复选框选中数量
Nov 24 Javascript
JavaScript在网页中画圆的函数arc使用方法
Nov 13 Javascript
总结Node.js中的一些错误类型
Aug 15 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
Vue项目环境搭建详细总结
Sep 26 Javascript
小程序实现图片预览裁剪插件
Nov 22 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
50个PHP程序性能优化的方法
2014/06/02 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
js同源策略详解
2015/05/21 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
axios 封装上传文件的请求方法
2018/09/26 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
py中的目录与文件判别代码
2008/07/16 Python
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python实现画一颗树和一片森林
2018/06/25 Python
详解python多线程之间的同步(一)
2019/04/03 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
五年级英语教学反思
2014/01/31 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
志愿者活动总结范文
2014/04/26 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
运动会跳远广播稿
2015/08/19 职场文书
市场营销计划书
2019/04/24 职场文书
redis实现排行榜功能
2021/05/24 Redis