爲何須要Sessionweb
這是爲了填補 Http 協議的侷限,當用戶去訪問一個頁面,服務端返回完了請求(如,你訪問完一個網頁,這個頁面將頁面內容,界面UI呈現給你),就算是結束了,就斷開了,服務端再也不去追蹤客戶端(瀏覽器)的任務狀態,因此 Http 的每次請求都是獨立的,非連續的,Http 也稱爲無狀態協議。那咱們若是想在一個場合,或是一個特定過程,操做些用戶本身的數據,就會很麻煩,甚至很危險。好比你能夠經過 url 傳參數的方式與服務器交互,並實現操做;瀏覽器
Session(會話) 的出現就解決了這樣的問題,Session是建立在服務端的,在必定的時間後,由服務端來消毀。在這段時間,客戶端與服務端的會話就會保持着,客戶端就會利用服務端上的 Session 信息來找到或操做一些數據;服務器
如何使用 Sessionsession
Java Api 只給咱們一種方式來 獲取 當前會話相關的 session:jsp
HttpSession session = request.getSession(); //或 HttpSession session = request.getSession(boolean);
設置值:url
session.setAttribute("key", 值對象);
獲取值:spa
對象類型 obj = (對象類型)session.getAttribute("key"); //如 String name = (String)session.getAttribute("key");
刪除 session 指定屬性健:code
session.removeAttribute("key");
清除全部的session,使當前 session 徹底失效:server
session.invalidate();
session超時週期設置 xml
1. Tomcat 安裝位置 conf/web.xml :
<session-config> <session-timeout>30</session-timeout> </session-config>
30分種
2. Tomcat 安裝位置 conf/server.xml :
<Context path="/test" docBase="/test" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>
單位爲 秒
3. Java 代碼設置:
HttpSession session = request.getSession();
session.setMaxInactiveInterval(1200);
20 分種:
其餘說明:
1. session 過時狀況:
1>. 客戶端瀏覽器關閉:
2>. session 會話過時;
3>. 客戶端會話調用了 .invalidate();
2. 瀏覽器關閉與session是否還在;
當客戶端瀏覽器關閉後,session 在服務端仍是會存在必定時間的,只是當瀏覽器器再次打開時,就會生成一個新的 session ,瀏覽器經過生成的 sessionid 屬性來 匹配服務端的 session; 那上次的session 雖然還在,可是就訪問不到了;
3. <% @ page session="false" %> 是什麼狀況?:
這句話的意思是,當前不能使用 session, 可是 頁面 session 仍是能夠建立的;
4. session 在何時 被建立:
在 程序 調用 HttpServletRequest.getSession(true) 時建立;若是 頁面沒有使用 <%@ page session="false"%> 時,在 jsp 頁面編譯成 Servlet 時,會自動 加上 HttpSession session = HttpServletRequest.getSession(true);