我点击页面上一个logout的链接,去action里使session.invalidate,再forward到之前的页面,这个时候,用标签判断一下session里的user是否存在,存在就显示logout链接,否则logon,但action的success页面如果是forward的时候,仍然显示成logon链接了,只有redirect的时候,才能真正决断出来,这是为什么?session的invalidate应该是立即生效啊,在后台输出也是user=null了,相关配置如下:jsp:<table width="368" border="1" height="52" style="width: 368px;">
<s:if test="#session.user==null">
<tr>
<td>
&nbsp;
<a href="/myblog/user/beforeDo.do">Register</a>
</td>
<td>
<a href="/myblog/logon.jsp">Log on </a>
<br>
</td>
</tr>
</s:if>
<s:else>
<tr>
<td>
&nbsp;Personal Homepage
<br>
</td>
<td>
&nbsp;Manage Category
<br>
</td>
<td>
<a href="/myblog/user/logout.do">&nbsp;Log Out</a>
<br>
</td>
</tr>
</s:else>
</table>
<br>
struts.xml:<action name="logout" class="userAction" method="logout">
<result type="redirect" name="success">/index.jsp</result>
</action>
action:public String logout(){
ServletActionContext.getRequest().getSession().invalidate();
System.out.println(getSession().getAttribute("user"));
return SUCCESS;
}

解决方案 »

  1.   

    ServletActionContext.getRequest().getSession().removeAttribute("user")试试这个呢
      

  2.   

    ServletActionContext.getRequest().getSession().clear();
      

  3.   

    你还是用session里面保存的用户信息判断吧,不要用session判断
      

  4.   

    ServletActionContext.getRequest().getSession().clear();不好用吗?我们项目中都是这样做的啊。
      

  5.   

    session没有这个方法啊,你们是不是把session封装了。