我正在做一个多用户登录应用程序,我使用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用户。即它正在从缓存加载用户。如果我刷新页面,它将加载正确的用户。
我该如何解决?
答案 0 :(得分:0)
首先,会话存储在服务器上,与客户端缓存无关。
以前的用户没有从缓存加载(如你所说),页面是从缓存加载的,因为链接在GET上转到服务器。如果URL自上次请求后没有更改,浏览器可以自由缓存GET的结果。
要解决此问题,您需要使客户端缓存无效。您可以通过添加HTTP cache header directives或by adding meta tags in the page来实现。
我建议使用HTTP标头,因为代理通常不会读取页面内容,即使客户端没有将页面存储在客户端缓存中,您也可能最终在代理服务器上使用缓存。 / p>