Session Management
利用javax.servlet.http.HttpServletRequest接口的getSession()方法可以取得HttpSession對象,沒有時會產生Session.Session是通過SessionId來辨別是否同一Session的。在getSession()若以前沒有Session,WEB容器會產生一個SessionID和Cookie對象,並把這個SessionID填充進Cookie對象,Cookie對象會被加入到HttpservletResponse的包頭當中。再有請求發生時,Cookie會隨請求包頭一起發到服務器,服務器以此來辨別是否同一Session.。
再利用HttpSession接口的某些方法來存取HttpSession對象的內容。
javax.servlet.http.HttpSession接口下的方法:
Object getAttribute(String name) 從HttpSession會話狀態中取得某屬性。
Enumeration getAttributeNames() 從HttpSession會話狀態中取出所有屬性名稱。
void setAttribute(String name , Object object) 從HttpSession會話狀態中加入某對象爲屬性。
void removeAttribute(String name) 從HttpSession會話狀態中移除某屬性。
void invalidate() 終止某個HttpSession會話狀態。
void setMaxInactiveInterval(int interval) 設定HttpSession會話狀態的”超時”時間,單位爲秒。
long getCreationTime() 取得HttpSession會話狀態的建立時間。
ServletContext getServletContext() 取得ServletContext對象。
另外還有得到得到最大超時時間方法和最後一次訪問時間方法等。
HttpSession會話狀態等同於HttpSession對象
在web.xml內設定HTTP會話階段的timeout時間,方法如下:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
以上設定timeout時間爲30分鐘。
若客戶端Cookie關閉,此時需要通過URL改寫來維持HttpSession狀態。
HttpServletResponse接口的encodeURL(String url)方法。
在URL改寫的場合如果需呼叫sendRedirect()方法,應改用HttpServletResponse接口的encodeRedirectURL(String url)方法。
終止HttpSession會話狀態的方法:
方法一:呼叫HttpSession接口的void invalidate()方法
方法二:在web.xml設定HTTP會話階段的timeout時間
如果要設定HttpSession會話狀態每20分鐘即終止會話(不論是否在使用或idle),必須透過getCreationTime()方法