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()方法