Проблема с HttpSession в Struts2

Я делаю многопользовательское приложение для входа в систему, где я использую сеанс для хранения пользовательского объекта.

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 в приложении, пользователь меняется на Предыдущий пользователь в сеансе. то есть он загружает пользователя из кеша. Если я обновлю страницу, она загрузит правильного пользователя.

Как я могу это исправить?


person TanNM    schedule 13.04.2011    source источник
comment
Какую версию Struts вы используете? Это больше похоже на Struts 1.x.   -  person Steven Benitez    schedule 13.04.2011
comment
Я использую struts2. Спасибо за интерес.   -  person TanNM    schedule 13.04.2011


Ответы (2)


Если вы используете Struts2, возможно, имеет смысл иметь эту проверку в Interceptor, а не повторять код в каждом JSP.

http://struts.apache.org/2.0.11/docs/interceptors.html

person Nate    schedule 13.04.2011
comment
Пожалуйста, помогите мне, потому что Interceptor не исправляет мою ошибку! Предыдущий пользователь все еще в сеансе Interceptor. - person TanNM; 14.04.2011

Нейт прав, с этим лучше всего справиться на перехватчике. Этот ответ может быть вам полезен.

Изменить

Похоже, это может быть проблема с кэшированием страниц. Попробуйте установить точку останова в своем коде Java, чтобы вы могли проверить, что представляет собой пользовательский объект в сеансе. Предполагая, что пользовательский объект всегда правильный, и это просто страница, отображающая неверную информацию, попробуйте установить заголовки без кеша как подробно здесь.

person Steven Benitez    schedule 13.04.2011
comment
Спасибо за ответ. Я использовал такой же перехватчик в вашей ссылке, но я хочу получить пользователя на странице jsp, решение для него? - person TanNM; 14.04.2011
comment
${sessionScope.user} должен работать, предполагая, что пользовательский объект находится в сеансе как пользователь. Логический тег не будет работать, это из Struts 1. - person Steven Benitez; 14.04.2011
comment
Пожалуйста, помогите мне, потому что Interceptor не исправляет мою ошибку! Предыдущий пользователь все еще в сеансе Interceptor. - person TanNM; 14.04.2011
comment
Привет Стивен Бенитес! Спасибо за ответ, я добавляю в код своей страницы jsp ниже, но не правильно! <meta http-equiv="expires" content="now"/> <meta http-equiv="pragma" content="no-cache"/> <meta http-equiv="Cache-Control" content="no-cache"/> <% response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching at the proxy server %> - person TanNM; 19.04.2011
comment
Пожалуйста, измените свой вопрос, чтобы добавить код, который вы пробовали. Кроме того, вы установили точку останова в Java и посмотрели, каково фактическое значение в сеансе? - person Steven Benitez; 19.04.2011