2010-11-08 46 views

回答

1

您不需要手動執行此操作。 servletcontainer將爲你做。您可以通過HttpServletRequest#getSession()訪問跟蹤的會話。您只需將登錄用戶設置爲會話屬性即可。

request.getSession().setAttribute("user", user); 

讓其餘的代碼攔截。您通常使用Filter

if (request.getSession().getAttribute("user") == null) { 
    // Not logged in. Redirect to login page. 
    response.sendRedirect("login.jsp"); 
} else { 
    // Logged in. Just continue request. 
    chain.doFilter(request, response); 
} 

當您調用註銷時,只需從會話中刪除用戶。

request.getSession().removeAttribute("user"); 

servletcontainer也會管理會話過期。當它到期時,HttpSession將被簡單地刪除,包括它的所有屬性。

至於後退按鈕的問題,只是指示客戶端不緩存響應,以便它被迫啓動一個全新的請求,然後通過Filter。這個客戶端指令需要通過相應地設置響應頭來進行。這也可以在Filter中完成。

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
response.setDateHeader("Expires", 0); // Proxies. 
0

首先,會話創建和銷燬:

使用HttpSessionListener

執行sessionCreated(HttpSessionEvent se)帶有輸出,告訴您已創建會話。

執行sessionDestroyed(HttpSessionEvent se)帶有輸出,告訴您會話已被銷燬。也就是說,用戶已註銷,或者用戶的會話已過期。

現在,中間部分。對於該過濾器,使用filter,對應的web.xml條目爲*.jsp。在過濾器內部,使用doFilter(ServletRequest request, ServletResponse response, FilterChain chain)。將ServletRequest轉換爲HttpServletRequest。使用該請求,您可以使用許多方法來進行會話跟蹤。用戶的憑據,訪問URL,基本上所有可能感興趣的內容。