您现在的位置是:首页 >

api防止重复提交 Web应用中避免Form重复提交的三种方案

火烧 2022-06-17 07:11:00 1038
We 应用中避免Form重复提交的三种方案 前两种是利用java cri t 后面一种是在使用Strut 的情况下的参考实现:   java cri t 设置一个变量 只允许提交一次    lt cr

Web应用中避免Form重复提交的三种方案  

前两种是利用javascript 后面一种是在使用Struts的情况下的参考实现:   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> <:form action= myAction do method= post onsubmit= return checkSubmit(); >

api防止重复提交 Web应用中避免Form重复提交的三种方案
   还是javascript 将提交按钮或者image置为disable

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

   利用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()方法    //验证事务控制令牌 <:form> 会自动根据session中标识生成一个隐含input代表令牌 防止两次提交    在action中

   //<input type= hidden name= apacl TOKEN // value= aa f fd c c c ae > if (!isTokenValid(request)) errors add(ActionErrors GLOBAL_ERROR new ActionError( error transaction token )); resetToken(request); //删除session中的令牌

   action有这样的一个方法生成令牌 lishixinzhi/Article/program/Java/JSP/201311/19531  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码