4
• 會話管理
學習目標
• 了解會話管理基本原理
• 使用 Cookie 類別
• 使用 HttpSession 會話管理
• 了解容器會話管理原理
會話管理基本原理
• 每個請求對伺服器來說都是新的訪客請求
• 每次請求時「主動告知」伺服器多次請求間
必要的資訊
使用隱藏欄位
使用隱藏欄位
使用 Cookie
使用 Cookie
• Cookie 的設定是透過 set-cookie 標頭
• 必須在實際回應瀏覽器之前使用
addCookie() 來新增 Cookie 實例
• 瀏覽器輸出 HTML 回應之後再執行
addCookie() 是沒有作用的
使用 Cookie
• 可以使用 setMaxAge() 設定 Cookie 的有效
期限,設定單位是「秒」
• 預設關閉瀏覽器之後 Cookie 就失效
取得 Cookie
• HttpServletRequest 的 getCookies()
取得 Cookie
• Cookie 若要避免被竊取,可以透過 Cookie
的 setSecure()設定 true,那麼就只會在
連線有加密(HTTPS)的情況下傳送 Cookie。
• 在 Servlet 3.0 ,Cookie 新增了
setHttpOnly()方法
– 會在 set-cookie 標頭上附加 HttpOnly 屬性,
在瀏覽器支援的情況下,這個 Cookie 將不會被
客戶端腳本(例如 JavaScript)讀取
– 使用 isHttpOnly() 得知一個 Cookie 是否被
setHttpOnly()
使用 URI 重寫
使用 HttpSession
• 用 HttpServletRequest 的
getSession() 取得 HttpSession 物件
• 會話範圍屬性
– setAttribute()
– getAttribute()
使用 HttpSession
• 預設關閉瀏覽器前,取得的 HttpSession
都是相同的實例
• 直接讓目前的 HttpSession 失效,可以執
行 HttpSession 的 invalidate()
使用 HttpSession
HttpSession 會話管理原理
HttpSession 會話管理原理
HttpSession 自動失效
• 執行 HttpSession 的
setMaxInactiveInterval() 方法,單
位是「秒」
• 在 web.xml 設定
HttpSession 自動失效
• HttpSession 物件在瀏覽器多久沒活動就
失效的時間
• 不是儲存 Session ID 的 Cookie 失效時間
• 儲存 Session ID 的 Cookie 預設為關閉瀏覽器
就失效
SessionCookieConfig
• Servlet 3.0 新增,可在 web.xml 設定
HttpSession 與 URI 重寫
• HttpSession 預設用 Cookie 存 Session ID
• 在使用者禁用 Cookie 的情況下,仍打算運用
HttpSession 來進行會話管理,那麼可以
搭配 URI 重寫的
• 可以使用 HttpServletResponse 的
encodeURL() 協助產生所需的 URI 重寫
HttpSession 與 URI 重寫
• encodeURL()
• encodeRedirectURL()

Ch04 會話管理