2010-05-20 3 views
2

У меня есть JSP/Servlet Веб-приложение, состоящее из более чем одного сервлета (и некоторые JSPs)Обеспечить новый сеанс каждый раз, когда пользователь подключается к Servlet

Мне нужно создать новый HttpSession, когда пользователи сервлетом доступа A, зная, что сервлет A является домашней страницей (то есть он обращается к нему как к первому сервлету/странице в приложении).

До сих пор так хорошо, что я могу написать следующий код в начале сервлета A:

HttpSession session = request.getSession(false); 
if (session == null) { 
    logger.debug("starting new session..."); 
    session = request.getSession(); 
    // other stuff here 
} 

Но проблема в том, если пользователь не закрыл свой браузер (даже если он закрывает вкладка - например, в Firefox - сеанс по-прежнему будет открыт), поэтому, когда он снова попытается открыть мой сайт, последний сеанс будет повторно использован (в зависимости от времени ожидания сеанса), и это не так необходимость. Мне нужно, чтобы всякий раз, когда он обращается к Servlet A, он получает новый HttpSession.

Но, к сожалению, он может получить доступ к этому сервлету дважды за сеанс, основываясь на каком-то сценарии!

ответ

2

Мне кажется, что вы не должны использовать сессии для этой цели. Возможно, вы можете добавить параметр для запроса (т. Е. Идентификатор транзакции) и передать его по всем связанным с ним запросам, поэтому, когда пользователь закроет страницу, идентификатор транзакции исчезнет. Затем вы можете хранить любые данные, связанные с данным идентификатором транзакции, в сеансе http или в другом месте, а также через некоторое время очистить его.

Весенний каркас имеет абстракцию под названием «bean scope», которая кажется подходящей для вашего сценария, поэтому вы можете создать настраиваемую область для своей транзакции (или сеанса пользователя) и сохранить все данные в некоторых компонентах, пользовательский объем.

1

Вы должны сохранить некоторую информацию (атрибут) в сеансе, в которой она была использована. И если это было, invalidate

HttpSession session = request.getSession(); 

Object isOld = session.getAttribute("isOld"); 

if (isOld != null) 
{ 
    session.invalidate(); 

    // Recreate session 
    session = request.getSession(); 
} 

session.setAttribute("isOld", new Object()); 
Смежные вопросы