有人可以讓我知道如何區分新登錄(新會話)和會話超時。
僅在登錄時:用戶必須經過身份驗證並重定向到servlet才能加載用戶詳細信息(在其他screnarios用戶不能重定向到servlet) 並且超時用戶必須重定向到超時頁面。
識別新會話(用戶未登錄):
- 由於會話在超時時間變爲空,因此無法使用會話屬性。
- 爲會話管理設置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;
如果我使用下面的方法,它可以用於第一次登錄嘗試。 第一次登錄會話超時後,篩選器將重定向到超時頁面。 用戶在超時後在同一窗口中訪問應用程序時出現實際問題。
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的服務器