基于Struts的应用程序中的会话问题

时间:2011-01-15 09:47:19

标签: session struts state

我正在做一个多用户登录应用程序,我使用session来存储用户对象。

  HttpSession session = request.getSession(true);
  session.setAttribute("user",user);

在每个页面中,我使用JSTL检查会话中是否存在用户对象。

<c:choose>
   <c:when test="${not empty sessionScope.user}"> 
    //jsp code
    </c:when>
   <c:otherwise> 
    <logic:redirect forward="welcome"/>
  </c:otherwise>
</c:choose>

我的问题是,如果用户点击应用程序中的href链接,则用户将更改为会话中的Previous用户。即它正在从缓存加载用户。如果我刷新页面,它将加载正确的用户。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

首先,会话存储在服务器上,与客户端缓存无关。

以前的用户没有从缓存加载(如你所说),页面是从缓存加载的,因为链接在GET上转到服务器。如果URL自上次请求后没有更改,浏览器可以自由缓存GET的结果。

要解决此问题,您需要使客户端缓存无效。您可以通过添加HTTP cache header directivesby adding meta tags in the page来实现。

我建议使用HTTP标头,因为代理通常不会读取页面内容,即使客户端没有将页面存储在客户端缓存中,您也可能最终在代理服务器上使用缓存。 / p>