Java web解决表单重复提交问题
作者:网络转载 发布时间:[ 2015/5/21 13:46:04 ] 推荐标签:编程语言
我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题。来给总结如何解决表单提交问题,欢迎大家交流指正。
首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提交?2.什么情况下会出现表单重复提交?3.什么情况需要避免表单重复提交?
什么叫表单提交问题,说白了,是同一份信息,重复的提交给服务器。
那么,在什么情况下回产生表单重复提交的情况呢?
给大家列举以下情况:
1.点击F5刷新页面:当用户点击submit将已经写好的表单数据提交到服务器时,可以在浏览器的url看到地址和参数的变化,但因为网速等问题,用户当前页面并未刷新,或者点击刷新页面,造成表单重复提交。
2.重复点击提交按钮:因为网络问题,未能及时跳转显示内同,部分用户可能会出于心急重复提交提交按钮,造成多次提交内容到服务器。
3.前进后退操作:有些用户在进行某些工作操作时,可能出于需要或者某种情况,进行后退操作,浏览刚才填入的信息,在进行后退和前进的操作可能也会造成表单数据重复提交到服务器。
4.使用浏览器历史记录重复访问:某些用户可能会出于好奇,利用浏览器的历史记录功能重复访问提交页面,同样会造成表单重复提交问题。
其实我们在进行web开发的时候,遇到的所有问题不一定是都需要解决的,大多数问题需要分情况而定。
例如现在所说的表单重复提交问题
那什么情况下必须防止表单重复提交问题呢:例如说注册用户功能(向数据库中写入垃圾信息),投票功能(多次刷票),购物结算功能(多次扣钱),防止论坛灌水功能。。。。
明确了以上三个问题后,我们来讨论如何解决表单重复提交问题:
翻阅了众多博客发现表单重复问题可以有多种解决方案,总结如下:
1.js方法解决:关于js方法解决是说通过js动态控制提交按钮不能多次点击,或者多次点击不起作用。
方案一:通过设立标识使表单不能重复提交:
var flag=true;
function Sub(){
if(flag){
flag = false;
document.form1.onsubmit();
}
}
方案二:一次点击后使得提交按钮变成不可用
<input type="button" value="login" onclick="this.disabled=true;this.form.submit();" />
总的来说,js解决方案是基本可以防止重复点击提交按钮造成的重复提交问题,但是前进后退操作,或者F5刷新页面等问题并不能得到解决。
重要的一点,前端的代码只能防止不懂js的用户,如果碰到懂得js的编程人员,那js方法没用了。
2.设置HTTP报头,控制表单缓存,使得所控制的表单不缓存信息,这样用户无法通过重复点击按钮去重复提交表单。
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
但是这样做也有局限性,用户在提交页面点击刷新也会造成表单的重复提交。
3.通过PRG设计模式(用来防止F5刷新重复提交表单):
PRG模式通过响应页面Header返回HTTP状态码进行页面跳转替代响应页面跳转过程。具体过程如下:
客户端用POST方法请求服务器端数据变更,服务器对客户端发来的请求进行处理重定向到另一个结果页面上,客户端所有对页面的显示请求都用get方法告知服务器端,这样做,后退再前进或刷新的行为都发出的是get请求,不会对server产生任何数据更改的影响。
但此方法也不能防止所有情况:例如用户多次点击提交按钮;恶意用户避开客户端预防多次提交手段,进行重复提交请求;
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11