posts - 0, comments - 0, trackbacks - 0, articles - 15
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

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

          Posted on 2011-08-04 14:14 Cana 閱讀(311) 評論(0)  編輯  收藏 所屬分類: 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"); 
                   }
              }
          主站蜘蛛池模板: 安西县| 长武县| 侯马市| 孟津县| 灌云县| 麟游县| 英超| 临泉县| 乌兰察布市| 江西省| 静海县| 高州市| 达孜县| 墨脱县| 平罗县| 静安区| 阿拉善盟| 武陟县| 嫩江县| 金湖县| 晋中市| 岢岚县| 杂多县| 临沧市| 东阳市| 无极县| 连平县| 台前县| 西乌珠穆沁旗| 南平市| 哈巴河县| 五华县| 手游| 桃园县| 嘉祥县| 福泉市| 商南县| 调兵山市| 凤山县| 汉阴县| 河北省|