论坛首页 入门技术论坛

浏览器刷新,后退带来问题的解决

浏览 3566 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-19  

一个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. <!---->  
  7.      

    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问题解决

   发表时间:2007-12-20  
^_^。谢谢提供。。。
0 请登录后投票
   发表时间:2008-07-15  
不知道你的
2. 后退到不希望用户看到的页面
是怎么解决的,说的不是很清楚,有些看不到呢
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics