1.可以写一个Action来处理用户退出
2.可以用Session的invalidate()方法将session清除
3.这个跟防止重复提交差不多,搜一搜网上都是。

解决方案 »

  1.   

    你清空了session之后,你后退也是没有用的,你必须先判断session里是否包含了登陆信息。
      

  2.   

    没有用的 session清空不了.试了很多办法~
      

  3.   

    所谓的清空session,把原来放进去的东西设置为null不就可以了?
      

  4.   

    session怎么会清不掉的?你把你的代码贴出来看看,记得用高亮
      

  5.   

    session是可以设为null
    可是就算session设为null了
    缓存里还是留着这个用户访问过的页面,后悔的话还是可以看到这个用户去过的页面的
    网上一搜用户退出全是正确优雅的解决struts,jsp用户退出问题,文章我是看了,也正是我想要的那种解决办法,可是我做不出来,谁能帮我做出来啊,我怎么弄上去就不好使的
    还有
    我写了Action
    可是退出的按钮怎么去访问这个action?
    我这样写好象不对呢?
    jsp
    <html:button property="PassWordBackOutButton" onclick="PassWordBackOutJavaScript();">退出</html:button>
    function PassWordBackOutJavaScript()
    {
    document.forms[0].action='Base.do' ;
    document.forms[0].submit();
    }struts-config.xml
    <action
          input="/PassWordUpdate.jsp"
          path="/Base"
          scope="request"
          type="struts.action.BaseAction"
          validate="true">
          <forward name="sessionEnded" path="/UserLogin.jsp" />
        </action>
    Action
    package struts.action;import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;public abstract class BaseAction extends Action 
    {
        public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException 
        {
         response.setHeader( "Cache-Control" , "no-cache" ); 
         response.setHeader( "Cache-Control" , "no-store" ); 
         response.setDateHeader( "Expires" , 0); 
         response.setHeader( "Pragma" , "no-cache" );      if (!this.userIsLoggedIn(request)) 
         {
         ActionErrors errors = new ActionErrors();
         errors.add( "error" , new ActionError( "logon.sessionEnded" ));
         this.saveErrors(request, errors);     return mapping.findForward( "sessionEnded" );
         }
         return executeAction(mapping,form,request,response);
        }
        protected abstract ActionForward executeAction(ActionMapping mapping,  ActionForm form, HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException;
        private boolean userIsLoggedIn(HttpServletRequest request) 
        {
         if (request.getSession().getAttribute( "sessionUserName" ) == null) 
         {
         return false;
         }
         return true;
        }
    }
      

  6.   

    针对登录与否的判断可以写在Filter里面,这样所有的访问都可以被Filter截获
    最好用户推出以后把session销毁掉,而不是只把一个属性置空。
      

  7.   

    同时可以用head里面的属性来指定不使用缓存
      

  8.   

    判断是否登陆的Filter写完了
    先抛开后退按钮
    能不能写个退出按钮和一个销毁session的Filter给我啊
    实在是不会写了,脑袋一点都不转了
      

  9.   

    session销毁用action来做
    就在execute方法里面
    request.getSession().invalidate();或者更简单,不配ActionForm什么的那些,弄个jsp,里面
    <% request.getSession().invalidate() %>
    然后再redirect
    退出按扭就弄个超链接就行了
      

  10.   

    我想销毁session后按浏览器的后退按钮也回不到曾访问过的页面
    只要清除缓存就可以
     response.setHeader(   "Cache-Control"   ,   "no-cache"   );   
     response.setHeader(   "Cache-Control"   ,   "no-store"   );   
     response.setDateHeader(   "Expires"   ,   0);   
     response.setHeader(   "Pragma"   ,   "no-cache"   );   
    这就是清除缓存,可是我怎么按下按钮就找到这个action呀
    <action 
    input="/PassWordUpdate.jsp" 
    path="/Base" 
    scope="request" 
    type="struts.action.BaseAction" 
    validate="true"> 
    <forward   name="sessionEnded"   path="/UserLogin.jsp"   /> 
    </action> 
    我这么配怎么就不对呢?谁告诉我怎么配呀
      

  11.   

      response.setHeader(       "Cache-Control"       ,       "no-cache"       );      
      response.setHeader(       "Cache-Control"       ,       "no-store"       );      
      response.setDateHeader(       "Expires"       ,       0);      
      response.setHeader(       "Pragma"       ,       "no-cache"       ); 
        
    干吗要用上面这种方法呢?你把所有jsp页面的头都设成这些不就完了么
    还是上面说的,要用Action来处理退出就必须给按钮单独弄个form,这个form指向"/Base.do",
    要不就弄个LookupDispatchAction,就可以把按钮都放到一个Action中了。再不就按我上面说的弄个超链接,链接到"/Base.do"去,或者就是个jsp处理一下
      

  12.   

    用这个onclick="window.location='/Base.do'"或者onclick="window.location='./Base.do'"可以作按钮的提交路径
      

  13.   

    清楚Session后,后退就会提示页面以过期.
      

  14.   

    是啊
    清除session后,按后退就提示页面过期了,我试试连个action试试吧,郁闷了,昨天一开始连action不好使,出错
      

  15.   

    HTTP Status 404 - /Base.do--------------------------------------------------------------------------------type Status reportmessage /Base.dodescription The requested resource (/Base.do) is not available.
    --------------------------------------------------------------------------------Apache Tomcat/5.5.17404错误
    我怎么就没觉得哪个路径配置错了呢???
    帮忙啊大哥们,一个退出弄两天了,55555555555
    struts-config.xml配置<action
          input="/PassWordUpdate.jsp"
          path="/Base"
          scope="request"
          type="struts.action.BaseAction"
          validate="true">
          <forward name="sessionEnded" path="/UserLogin.jsp" />
        </action>
      

  16.   

    我看到你配了validate,你是不是验证文件没写全?至于找不到页面,你必须把设计到的几个文件说下路径/
      

  17.   

    jsp<html:button property="ProtectListBackOutButton" onclick="ProtectListBackOutJavaScript();">退出</html:button>
    function ProtectListBackOutJavaScript()
    {
      window.location.href = "BackOut.jsp" ;
    }BackOut.jsp  <body>
        <% 
        session.invalidate();
        response.sendRedirect("UserLogin.jsp");
        %>
      </body>formpublic ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
      ActionErrors errors = new ActionErrors() ;
      if (request.getSession().getAttribute("sessionUserName")==null||"".equals(request.getSession().getAttribute("sessionUserName"))) 
         {
       errors.add("error",new ActionMessage("session.null")) ;
       mapping.findForward("sessionEnded");
         }
      else
      {
       // 保护名单
       if(protectListBrandNumberInput==null||"".equals(protectListBrandNumberInput))
       {
        errors.add("errorProtectList",new ActionMessage("protectListBrandNumberInput.null")) ;
       }
       else
       {
        if(protectListBrandNumberInput.length()!=5)
        {
         errors.add("errorProtectList",new ActionMessage("protectListBrandNumberInput.leng")) ;
        }
       }
      }
      return  errors;
     }相应action:public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response) 
     {
      if (request.getSession().getAttribute("sessionUserName")==null||"".equals(request.getSession().getAttribute("sessionUserName"))) 
         {
       return mapping.findForward("sessionEnded");
         }
      else
      {
       
      }   
      ProtectListForm protectListForm = (ProtectListForm) form;
    public ActionErrors validate(ActionMapping mapping,
       HttpServletRequest request,HttpServletResponse response) {
      ActionErrors errors = new ActionErrors() ;
      if (request.getSession().getAttribute("sessionUserName")==null||"".equals(request.getSession().getAttribute("sessionUserName"))) 
         {
       errors.add("error",new ActionMessage("session.null")) ;
       mapping.findForward("sessionEnded");
         }
    这样在用户退出之后,可以返回到去过的页面,但是不能有任何操作,一进行操作的话就会返回到登陆页面