Может ли кто-нибудь дать мне знать, как различать новый вход в систему (новый сеанс) и время ожидания сеанса.
Только при входе в систему: пользователь должен пройти проверку подлинности и перенаправиться на сервлет для загрузки сведений о пользователе (для других пользователей screnariosне должен быть перенаправлен на сервлет), а по тайм-ауту пользователь должен быть перенаправлен на страницу тайм-аута.
Чтобы идентифицировать новый сеанс (пользователь не вошел в систему):
- Атрибуты сеанса не могут использоваться, так как сеанс становится пустымon timeout.
- Настройка файлов cookie для управления сеансом не работает.Файлы cookie удаляются для текущего сеанса
Cookie cookie = new Cookie("activeSession", null);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setValue("");
httpServletResponse.addCookie(cookie);
getCookieValue(httpServletRequest , "activeSession"); returns null
public static String getCookieValue(HttpServletRequest request, String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie != null && name.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
После выхода из системы или тайм-аута (сеанс недействителен), когда пользователь входит в систему и создает новый сеанс.Файлы cookie, которые были удалены в предыдущих сеансах, снова появляются с предустановленными значениями.
getCookieValue(httpServletRequest , "activeSession") returns a value;
Если я использую описанный ниже подход, он работает для 1-й попытки входа в систему.После истечения времени ожидания первого сеанса входа в систему фильтр перенаправляется на страницу времени ожидания.Фактическая проблема возникает, когда пользователь обращается к приложению в том же окне после истечения времени ожидания.
public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException,
{ if ((request instanceof HttpServletRequest)
&& (response instanceof HttpServletResponse)) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
//Check for a new login
if (httpServletRequest.getSession(false) == null && httpServletRequest.getRequestedSessionId()==null)
{
// Create a new session
httpServletRequest.getSession();
//Redirect to servlet on 1 st login to fetch details from DB
httpRequest.getRequestDispatcher("/loginServlet").forward(request,response);
}else{
//validate active or timedout sessions.
boolean isSessionValid = (httpServletRequest.getRequestedSessionId() != null) && !httpServletRequest.isRequestedSessionIdValid();
if(isSessionValid)
{
httpServletResponse.sendRedirect(getTimeoutPage());
}
}
}
filterChain.doFilter(request, response);
}
Поэтому детали не извлекаются из БД и страница загружается неправильно.
Браузер: IE 8 Сервер: сервер Weblogic