Проблем с 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
Използван съм подпори2. Благодаря за интереса.   -  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

Нейт е прав, това се справя най-добре в Interceptor. Този отговор може да ви бъде полезен.

Редактиране

Тогава изглежда, че това може да е проблем с кеширането на страницата. Опитайте да зададете точка на прекъсване във вашия Java код, така че да можете да проверите какъв е потребителският обект в сесията. Ако приемем, че потребителският обект винаги е правилен и това е само страницата, показваща неправилна информация, опитайте да зададете заглавки без кеш като подробно тук.

person Steven Benitez    schedule 13.04.2011
comment
Благодаря за отговора. Използвах същия Interceptor във вашата връзка, но искам да получа потребител в 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