程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Jsp防止二次提交(重復提交)

Jsp防止二次提交(重復提交)

編輯:關於JSP

servlet頁面代碼:@每次請求時產生一個token(一般為時間戳),存於session中並隨之用hidden提交,在servlet中判斷接收到的token和session中的是否一致來判斷是否重復提交,如果不是則重新產生一個   token存於session中覆蓋原來的token。

@當用戶返回或者刷新重復請求servlet時,servlet判斷token是否一致,由於請求方沒有產生新的token,所以和servlet新產生的token不一致,認為重復提交。

@當用戶在請求頁面刷新也就是重新在請求頁面產生token,這時新的token覆蓋servlet產生的token,這時token一致,認為是一個新的請求。

@請求的jsp頁面代碼:
<body>
    <%
           long token=System.currentTimeMillis();    //產生時間戳的token
            session.setAttribute("token",token);   
          
    %>
    <form  action="isRepeat" method="post">
        <input type="text"  name="username"/>
        <input type="text"  name="password"/>
        <input type="hidden" value="<%=token %>" name="token"/>   <!-- 作為hidden提交 -->
        <input type="submit" value="提交"/>
    </form>
</body>
 

@servlet頁面代碼:
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {
         req.setCharacterEncoding("utf-8");
         resp.setCharacterEncoding("utf-8");
         resp.setContentType("text/html,charset=utf-8");
         String username=req.getParameter("username");
         String password=req.getParameter("password");
         long token=Long.parseLong(req.getParameter("token"));
         long tokenInSession=Long.parseLong(req.getSession().getAttribute("token")+"");
         if(token==tokenInSession){
            resp.getWriter().println("ok ");
                        //如果是第一次請求,則產生新的token
                        req.getSession().setAttribute("token", System.currentTimeMillis());
            
         }
         else
         {
            
            resp.getWriter().println("do not repeat submit");
         }
    }

作者“如戲”
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved