先看看對session的一個比較好的闡述:
session就是一個會話,在瀏覽器不關閉的前提下,可以保存用戶的信息,就是像一個臨時的容器,來存放這些臨時的東西。比如登錄的保存用戶信息從一個網頁跳轉到另一個網頁,用戶信息就可以用session保存網站購物車可以用session實現
為什麼需要Session
這是為了填補Http 協議的局限,當用戶去訪問一個頁面,服務端返回完了請求(如,你訪問完一個網頁,這個頁面將頁面內容,界面UI呈現給你),就算是結束了,就斷開了,服務端不再去追踪客戶端(瀏覽器)的任務狀態,所以Http 的每次請求都是獨立的,非連續的,Http 也稱為無狀態協議。那我們如果想在一個場合,或是一個特定過程,操作些用戶自己的數據,就會很麻煩,甚至很危險。比如你可以通過url 傳參數的方式與服務器交互,並實現操作;
Session(會話) 的出現就解決了這樣的問題,Session是創建在服務端的,在一定的時間後,由服務端來消毀。在這段時間,客戶端與服務端的會話就會保持著,客戶端就會利用服務端上的Session 信息來找到或操作一些數據;
如何使用Session
Java Api 只給我們一種方式來獲取當前會話相關的session:
HttpSession session = request.getSession();//或HttpSession session = request.getSession(boolean);
設置值:
session.setAttribute("key", 值對象);獲取值:
對像類型obj = (對像類型)session.getAttribute("key");//如String name = (String)session.getAttribute("key");刪除session 指定屬性健:
session.removeAttribute("key");清除所有的session,使當前session 完全失效:
session.invalidate();
session超時周期設置
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);
0 分種:
其他說明:
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);
總結
以上就是本文關於了解java中的session的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!