HttpSession接口
public interface HttpSession
(https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html)
一、介紹
HttpSession接口提供了一種方式,使得用戶在多個網頁間瀏覽或請求時,他的身份信息可以得到驗證,Server可以據此返回與他關聯的內容。
Server容器通過這個接口,在一個HTTP客戶端和一個HTTP服務端之間創建一個session(會話)。這個會話會跨越來自該用戶的多個連接or頁面請求,持續一段指定的時間(可以編程設定)。
在一個用戶多次訪問某個站點時(其中不同的頁面),Server容器中創建一個session,對應這一個特定的用戶。Server能以多種方式維持一個會話,如cookies技術和重寫URL。
HttpSession接口允許servlet:
- 查看和操作session相關的信息,如session識別碼,創建時間以及上次被訪問的時間;
- 將對象綁定到session,這樣的話,用戶的相關信息就能在來自這個用戶的多個連接中存在;
當一個應用從一個session中存儲一個對象或移除一個對象,session會檢查這個對象是否實現了HttpSessionBindingListener。若它實現了該接口,servlet會通知該對象:您已經綁定到session或從session解綁了。通知消息會在綁定方法完成后發送,而對於將要失效或到期的會話,通知會在session失效或到期后發送。
在分布式容器配置下,當容器在VM之間遷移session時,所有實現HttpSessionActivationListener接口的屬性都會被通知。
Servet必須處理這樣一種情況:當客戶端選擇不加入session,如瀏覽器關閉cookies功能。在客戶端加入session前,isNew方法都會返回true。而如果客戶端不加入session,getSession方法將為每個來自該client的不同的request返回不同的session,isNew方法也會總是返回true。
會話的作用域局限在當前的Web應用中(即一個ServletContext內),所以存儲在一個上下文中存儲的信息不會被另一個直接訪問。
二、接口方法
1、long getCreationTime( )
返回session的創建時間。
2、String getId( )
返回分配給這個session的唯一識別碼,它由Servlet容器分配且依賴於實現。
3、long getLastAccessedTime()
返回上次被訪問的時間,即Web容器上一次收到這個session所關聯的client發送來的請求的時間。
4、ServletContext getServletContext( )
返回這個session所在的應用的ServletContext。
5、void setMaxInactiveInterval(int interval)
指定這個session的空閑存活時間,以秒為單位。
即隔了指定時間后該session,server沒有收到源自該session關聯client的請求,Servlet容器就會清理該session。
interval為0或者負數,表示該session一直有效。
6、int getMaxInactiveInterval()
返回上述的interval,即session的有效時間。
7、Object getAttribute(String name)
返回指定名稱的對象,即綁定到這個session的對象。
沒有返回null。
8、Enumeration<String> getAttributeNames()
返回綁定到該session的所有對象的名字。
Enumeration接口已經基本被Iterator接口替代了,功能是其子集,用於遍歷。
9、void setAttribute(String name, Object value)
Binds an object to this session, using the name specified.
If an object of the same name is already bound to the session, the object is replaced.
10、void removeAttribute(String name)
Removes the object bound with the specified name from this session.
If the session does not have an object bound with the specified name, this method does nothing.
11、void invalidate()
Invalidates this session then unbinds any objects bound to it.
12、boolean isNew()
返回true——如果client還沒有與這個session關聯,或者client選擇不加入session。
例如,Server只使用了基於cookie的session機制,而client又禁用了cookie,那么每個請求的session都會是新的。