防止表单重复提交的几种方法总结

1、JavaScript防止表单重复提交(主要用于网络延迟情况下用户点击多次submit按钮导致表单重复提交)

jsp页面中,添加JavaScript代码来防止表单的重复提交。主要是针对在网络延迟情况下用户有时间点击多次submit按钮导致表单重复提交,使用javascript控制Form表单只能提交一次。

<script type=”text/javascript”>

Var isCommitted = false;  //表单是否应提交标识,默认为false

function dosubmit() {

If(isCommitted == false){ //提交表单后,将表单是否已经提交设置为true

isCommitted = true; //返回true让表单正常提交

return true;

}else{

return false; //返回false表单不提交

}

}

</script>

2将提交按钮设置为不可用,让用户点击第一次提交之后,没有机会点击第二次提交按钮的机会。(也可以将提交按钮隐藏起来,在点击第一次之后,将提交按钮隐藏起来)

function dosubmit() {

//获取表单提交按钮

Var btnSubmit = documen.getElementById(“sumit”);

//将表单提交按钮设置为不可用,可以避免用户再次点击提交按钮进行提交

btnSubmit.disabled = “disabled”;

//返回true让表单可以提交

return true;

}

3、利用Session防止表单重复提交(主要用于表单提交之后,点击浏览器刷新按钮导致表单重复提交,以及点击浏览器返回按钮退回到表单页面后进行再次提交)

(1)、表单页面由servlet程序(服务器端)生成,servlet为每次产生的表单页面分配一个唯一的随机标识号(Token令牌),并在FORM表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号。
2)、当用户提交FORM表单时,负责处理表单提交的serlvet得到表单提交的标识号,并与session中存储的标识号比较,如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。如果不一致,就是重复提交了,此时服务器端就可以不处理重复提交的表单了。
3)、服务器程序将拒绝用户提交的表单请求情况如下:
1):存储Session域中的表单唯一的标识号与表单提交的标识号不同
2):当前用户的Session中不存在表单标识号
3):用户提交的表单数据中没有标识号字段

(4)、创建标识号

String token = TokenProccessor.getInstance().makeToken();

(5)、在服务器端使用Session保存标识号

request.getSession().setAttribute(“token”,token);

 

(6)、在form表单中也就是JSP页面中,使用隐藏域来存储标识号(Token令牌)

(可以使用EL表达式取出存储在Session域中的token

<%--    

<input type=”hidden” name=”token” value=”<%=session.getAttribute(“token”) %>”>

--%>

  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值