瀏覽器刷新,後退帶來問題的解決

一個B/S系統,瀏覽器的刷新,後退會帶來一些我們不希望看到的錯誤,我們不要這樣,不要這樣嘛~~

 

 

1. 刷新帶來的重複提交

 

問題:例如,要增加一個用戶,從addUser.jsp提交form到uerManagerAction,添加成功後返回到showUser.jsp,這時點擊刷新,會又添加一次數據。

解決方法:使用Token

uerManagerAction.java
  1. /* 跳轉到 “添加管理員” 頁面  
  2. * 使用令牌   */  
  3. saveToken(request);   
  4. return mapping.findForward("addAdminPage");  
struts-config.xml
  1. <forward name="addAdminPage" path="/WEB-INF/jsp/user/addAdmin.jsp"/>  

 

在addUser.jsp中,會在

  1. <html:form action="/userManager">  

  下會自動加上

  1. <input type="hidden" name="Token" value="...."/>  

這樣一句,他的value是根據ID和系統時間自動生成的

uerManagerAction.java
  1. /* 使用令牌避免重複提交 */  
  2. if(!isTokenValid(request)){    
  3.        request.setAttribute("msg","請不要重複提交!!!");   
  4.        saveToken(request);    
  5.        return mapping.findForward("addAdminPage");   
  6. }else{   
  7.        resetToken(request);   
  8. }  

下面跟上自己的代碼就行了。原理就不寫了,網上很多........

 

 

2. 後退到不希望用戶看到的頁面

 

問題:1)用戶註銷後,點後退鍵又回到登錄後頁面

           2)用戶填寫一個form,提交後,點後退鍵又到form頁面,重複提交

解決方法:

對於問題1),首先登陸後給session裏寫入username等信息

uerManagerAction.java   登錄action
  1. request.getSession().setAttribute("username", name);   
  2. return mapping.findForward("welcome");  
struts-config.xml
  1. <forward name="welcome" path="/WEB-INF/jsp/user/main.jsp" />  
main.jsp
  1.   
  2.     "text/javascript">   
  3.         alert("請先登錄");   
  4.         window.location.href="login.jsp";   
  5.        
  6.   

     

uerManagerAction.java   註銷action

  1. // 退出登錄   
  2. // 清空session,結合main.jsp中的判斷,避免退出後點返回又回到登錄後界面   
  3. request.getSession().invalidate();   
  4. return mapping.findForward("logout");  

 

對於問題2)

後退帶來的重複提交的問題,可以和刷新重複提交結合解決。

只要在填寫form的頁面禁用緩存,在加上使用Token,就可以比較好的解決

addUser.jsp
  1.   
  2.   

 

ok問題解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章