`

防止页面被多次提交

阅读更多

1.    javascript ,设置一个变量,只允许提交一次。

<script language="javascript"> 
    
var checkSubmitFlg = false
     
function checkSubmit() ...
               
if (checkSubmitFlg == true...
                   
return false
                }

               checkSubmitFlg 
= true
               
return true
          }

      document.ondblclick 
= function docondblclick() ...
                window.event.returnValue 
= false
          }

      document.onclick 
= function doconclick() ...
                
if (checkSubmitFlg) ...
                    window.event.returnValue 
= false
                }
 
          }
 
</script> 

 

<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">  

2.   还是javascript,将提交按钮或者image置为disable

<html:form action="myAction.do" method="post" onsubmit="getElById('submitInput').disabled = true; return true;">    
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />  
</html:form>

3.    利用struts的同步令牌机制  
    利用同步令牌(Token)机制来解决Web应用中重复提交的问题,Struts也给出了一个参考实现。
    基本原理: 
    服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。 

if (isTokenValid(request, true)) ...
 
// your code here 
 return mapping.findForward("success"); 
}
 else ...
 saveToken(request); 
 
return mapping.findForward("submitagain"); 
}
  

  Struts根据用户会话ID和当前系统时间来生成一个唯一(对于每个会话)令牌的,具体实现可以参考TokenProcessor类中的generateToken()方法。  
  1. //验证事务控制令牌,<html:form >会自动根据session中标识生成一个隐含input代表令牌,防止两次提交
  2. 在action中:

//<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" 
// value="6aa35341f25184fd996c4c918255c3ae"> 
  if (!isTokenValid(request)) 
   errors.add(ActionErrors.GLOBAL_ERROR, 
new ActionError("error.transaction.token")); 
 resetToken(request); 
//删除session中的令牌  

     3. action有这样的一个方法生成令牌  

 protected String generateToken(HttpServletRequest request) ...{   
   HttpSession session 
= request.getSession(); 
   
try ...
     
byte id[] = session.getId().getBytes(); 
     
byte now[] = 
     
new Long(System.currentTimeMillis()).toString().getBytes(); 
     MessageDigest md 
= MessageDigest.getInstance("MD5"); 
     md.update(id); 
     md.update(now); 
     
return (toHex(md.digest())); 
   }
 catch (IllegalStateException e) ...
     
return (null); 
   }
 catch (NoSuchAlgorithmException e) ...
     
return (null); 
   }
 
}
 
分享到:
评论

相关推荐

    防止页面刷新重复提交的方法.

    防止页面刷新重复提交是 Web 开发中常见的问题,多次提交表单可能会导致不必要的数据重复录入、服务器压力增大等问题。下面我们将详细介绍防止页面刷新重复提交的方法。 一、验证码方法 验证码方法是防止页面刷新...

    asp.net 页面防止重复提交

    然而,这种方法并不能完全防止所有情况下的重复提交,因为某些用户可能使用浏览器的刷新功能或者在网络延迟后多次点击。 ASP.NET MVC框架提供了一些内置机制来处理此问题。例如,可以使用`AntiForgeryToken`辅助...

    ASP.NET中防止刷新页面造成表单重复提交

    这种方法虽然简单有效,但用户体验较差,尤其是在用户不小心多次点击提交按钮时,可能会导致数据丢失或操作中断。 2. **清除表单数据**:即在表单提交后清除表单数据,使得即使用户刷新页面也不会有数据被提交。...

    防止页面重复提交demo

    通常,用户在点击提交按钮后,由于网络延迟或刷新页面,可能会导致同一份表单数据被多次提交。为了防止这种情况,我们可以采取以下策略: 1. **前端控制**:在用户点击提交按钮后,立即禁用该按钮,以避免用户多次...

    防止页面二次刷新

    在Web开发中,"防止页面二次刷新"是一个重要的议题,主要涉及到的是防止用户无意或恶意地多次提交表单数据,这种情况通常称为"二次提交"或"重复提交"。这一问题可能会导致数据库中的数据异常,影响系统的稳定性和...

    防止Layui form表单重复提交的实现方法

    但仅仅这样做是不够的,因为用户可能会多次点击提交按钮,导致多次触发JavaScript的提交逻辑。 其次,可以采用Layui的lay-filter属性来标记表单,以便对特定的表单进行控制。在表单的标签中加入lay-filter="form...

    防止页面的重复提交和刷新

    重复提交通常发生在用户在未收到明确反馈的情况下尝试多次提交表单的情况。这种情况可能会导致数据库中出现重复的数据记录,从而影响数据的一致性和准确性。例如,在在线购物系统中,用户可能会担心支付请求没有被...

    防止用户刷新,重复提交数据

    - **支付系统**:防止用户意外点击多次支付按钮,导致重复扣款。 - **投票系统**:避免用户刷票。 - **注册与登录**:防止恶意注册或频繁尝试登录。 - **评论发布**:确保评论只发布一次。 ### 五、优势与注意事项 ...

    [Jsp]防止页面表单重复提交的解决方法

    当用户点击提交按钮后,由于网络延迟或浏览器刷新等原因,可能导致同一份表单数据多次发送到服务器。如果不加以控制,服务器可能会处理多个相同的请求,造成数据冗余或错误操作。 二、防止表单重复提交的方法 1. *...

    微信小程序防止多次点击跳转(函数节流)

    在微信小程序的开发过程中,避免用户因重复点击而导致页面多次跳转的问题是常见的需求。本文将详细介绍如何通过实现函数节流(throttle)的方式来防止在小程序中多次点击按钮导致的重复跳转。 函数节流的原理是在...

    ASP实例开发源码—asp.net(c571)等待效果和防止多次提交的代码.zip

    防止多次提交是Web应用中常见的需求,主要是为了避免用户因误操作或网络延迟导致同一份数据被重复提交。一种常见的方法是在表单提交后禁用提交按钮,或者设置一次性令牌(Token)。在ASP.NET中,可以通过`ViewState...

    防止表单重复提交

    这样,即使用户多次提交,服务器也能正确处理。 4. **事务管理**:在数据库层面上,利用事务的ACID属性(原子性、一致性、隔离性和持久性),确保即使有重复提交,数据库状态也能保持一致。但这种方法不能防止不必...

    javascript方式防止表单重复提交

    JavaScript作为客户端脚本语言,可以通过多种策略来防止用户意外或恶意地多次提交表单。以下是一些关键的知识点: 1. **禁用提交按钮**:最简单的预防方法是在用户点击提交按钮后立即将其禁用。这可以通过监听`...

    防止表单重复提交(asp.net )

    为了确保用户在提交表单时不会无意或有意地多次发送请求,我们需要实施有效的防止表单重复提交的策略。以下是一些关键知识点: 1. **表单重复提交的类型**: - **用户行为**:用户可能意外按下刷新按钮,导致已...

    element-ui如何防止重复提交的方法步骤

    问题在于Dialog的隐藏是一个动画过程,这期间如果用户快速点击,可能导致多次提交。正确的做法是在`&lt;el-dialog&gt;`上添加`@open`事件,初始化时使提交按钮可点击,如`@open="submitButtonDisabled = false"`。验证通过...

    自定义标签 防止重复提交

    - **客户端控制**:通常使用JavaScript来控制,一旦用户点击提交按钮,禁用该按钮,防止多次点击。但这并不能完全防止网络延迟导致的重复提交,因为HTTP请求可能在JavaScript执行前已经发送。 - **服务器端控制**...

    JS防止用户多次提交的简单代码

    为了解决这一问题,可以通过JavaScript实现一个简单的防止用户多次提交的机制。 从给定的文件内容来看,提供了一段HTML代码示例,其中使用JavaScript来防止用户在表单提交后重复点击提交按钮。这种机制的实现思路是...

    ajax 防止按钮重复提交

    当用户在表单中填写完信息后点击提交按钮,如果此时网络环境不稳定或用户在短时间内连续点击多次提交按钮,则可能导致同一份数据被多次发送到服务器端。这种情况下,不仅增加了服务器的压力,还可能导致数据库中的...

    Asp.net中防止用户多次登录的方法

    ### Asp.net中防止用户多次登录的方法 在Asp.net应用开发中,确保用户的单一登录状态是非常重要的,这不仅能够提升用户体验,还能有效保障系统的安全性和资源的有效利用。本文将详细解析一种有效的策略来实现这一...

    ASP.NET 防止按钮多次提交核心实现代码

    ***防止按钮多次提交的核心实现技术涉及到Web开发中一个常见问题,即用户在提交表单时可能会重复点击提交按钮,导致服务器端接收到多次请求。这不仅会消耗服务器资源,还可能产生错误的业务操作,如重复注册、多次扣...

Global site tag (gtag.js) - Google Analytics