session機制是一種服務器端的機制,服務器使用一種相似於散列表的結構(也可能就是使用散列表)來保存信息。 當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識 - 稱爲session id,若是已包含一個session id則說明之前已經爲此客戶端建立過session,服務器就按照session id把這個session檢索出來使用(若是檢索不到,可能會新建一個),若是客戶端請求不包含session id,則爲此客戶端建立一個session而且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。 一、session在什麼時候被建立 一個常見的誤解是覺得session在有客戶端訪問時就被建立,然而事實是直到某server端程序調用 HttpServletRequest.getSession(true)這樣的語句時才被建立,注意若是JSP沒有顯示的使用 <%@page session="false"%> 關閉session,則JSP文件在編譯成Servlet時將會自動加上這樣一條語句HttpSession session = HttpServletRequest.getSession(true);這也是JSP中隱含的session對象的來歷。 因爲session會消耗內存資源,所以,若是不打算使用session,應該在全部的JSP中關閉它。 二、session什麼時候被刪除 綜合前面的討論,session在下列狀況下被刪除a.程序調用HttpSession.invalidate();或b.距離上一次收到客戶端發送的 session id時間間隔超過了session的超時設置;或c.服務器進程被中止(非持久session) 三、如何作到在瀏覽器關閉時刪除session 嚴格的講,作不到這一點。能夠作一點努力的辦法是在全部的客戶端頁面裏使用javascript代碼window.oncolose來監視瀏覽器的關閉動 做,而後向服務器發送一個請求來刪除session。可是對於瀏覽器崩潰或者強行殺死進程這些很是規手段仍然無能爲力。 四、有個HttpSessionListener是怎麼回事 你能夠建立這樣的listener去監控session的建立和銷燬事件,使得在發生這樣的事件時你能夠作一些相應的工做。注意是session的建立和 銷燬動做觸發listener,而不是相反。相似的與HttpSession有關的listener還有 HttpSessionBindingListener,HttpSessionActivationListener和 HttpSessionAttributeListener。