HttpSession
HttpSession
HttpSession是Java平台對session機制的實現規範,因為它僅僅是個介面,具體到每個web應用伺服器的提供商,除了對規範支持之外,仍然會有一些規範里沒有規定的細微差異。這裡我們以ORACLE的Weblogic Server8.1作為例子來演示。
目錄
理解javax.servlet.http.HttpSession
首先,Weblogic Server提供了一系列的參數來控制它的HttpSession的實現,包括使用cookie的開關選項,使用URL重寫的開關選項,session持久化的設置,session失效時間的設置,以及針對cookie的各種設置,比如設置cookie的名字、路徑、域, cookie的生存時間等。
一般情況下,session都是存儲在內存里,當伺服器進程被停止或者重啟的時候,內存里的session也會被清空,如果設置了session的持久化特性,伺服器就會把session保存到硬碟上,當伺服器進程重新啟動或這些信息將能夠被再次使用, Weblogic Server支持的持久性方式包括文件、資料庫、客戶端cookie保存和複製。
複製嚴格說來不算持久化保存,因為session實際上還是保存在內存里,不過同樣的信息被複制到各個cluster內的伺服器進程中,這樣即使某個伺服器進程停止工作也仍然可以從其他進程中取得session。
cookie生存時間的設置則會影響瀏覽器生成的cookie是否是一個會話cookie。默認是使用會話cookie。有興趣的可以用它來試驗我們在第四節里提到的那個誤解。
cookie的路徑對於web應用程序來說是一個非常重要的選項,Weblogic Server對這個選項的默認處理方式使得它與其他伺服器有明顯的區別。後面我們會專題討論。
HttpSession類它提供了setAttribute()和getAttribute()方法存儲和檢索對象。HttpSession提供了一個會話ID關鍵字,一個參與會話行為的客戶端在同一會話的請求中存儲和返回它。servlet引擎查找適當的會話對象,並使之對當前請求可用。HttpServletRequest 介面提供了以下方法來獲取HttpSession實例。
public HttpSession getSession() :該方法取得請求所在的會話。
public HttpSession getSession(Boolean create):返回當前請求的會話。如果當前請求不屬於任何會話,而且create參數為true,則創建一個會話,否則返回null。此後所有來自同一個的請求都屬於這個會話,通過它的getSession返回的是當前會話。
方法
介紹
public void setAttribute(String name,Object value)
將value對象以name名稱綁定到會話
public object getAttribute(String name)
取得name的屬性值,如果屬性不存在則返回null
public void removeAttribute(String name)
從會話中刪除name屬性,如果不存在不會執行,也不會拋出錯誤.
public Enumeration getAttributeNames()
返回和會話有關的枚舉值
public void invalidate()
使會話失效,同時刪除屬性對象
public Boolean isNew()
用於檢測當前客戶是否為新的會話
public long getCreationTime()
返回會話創建時間
public long getLastAccessedTime()
返回在會話時間內web容器接收到客戶最後發出的請求的時間
public int getMaxInactiveInterval()
返回在會話期間內客戶請求的最長時間為秒
public void setMaxInactiveInterval(int seconds)
允許客戶客戶請求的最長時間
ServletContext getServletContext()
返回當前會話的上下文環境,ServletContext對象可以使Servlet與web容器進行通信
public String getId()
返回會話期間的識別號