Session

====理論====
session描述
最原始的session是服務器端的一個Map結構的存儲空間,但經常用的是HttpSession。
放入session的值可以在程序中的任何jsp,java類中進行讀取。通常會將用戶對象存入session,
session的內容不宜過多,有必要全局記錄的數據,就可以放入session中進行存儲。
多數量訪問,session的存活時間不能太長,因爲session是存活於服務器端的,佔用資源。

Cookie和Session的區別
Session是存儲於服務器端的,由服務器去銷燬和創建
Cookie是存儲於客戶端的,可以由服務器端去銷燬和創建也可以客戶端去銷燬
Cookie可以和Session一樣,瀏覽器關閉時銷燬
Session也可以和Cookie一樣,保存長時間,只要SessionID不丟,Session的存活時間夠長就可以實現。
Session是可以存儲Object value的Map,而Cookie只能存儲String value。
Session是單例的,Cookie就很隨意了,但是request中中的Cookie數組只有一個。

session的創建
session是單例的,如果存在一個session,則不會再創建session。否則創建出一個session並生成一個sessionid並保存到Cookie中。
所以如果創建了session,就會創建一個叫JSESSIONID的cookie,其值爲SessionID,保存在了客戶端。只要創建了session,那麼Cookie
的數量就至少爲1.且存儲SessionID的這個Cookie的MaxAge爲-1,表示瀏覽器關閉,Cookie就被刪除。
request.getSession();只要執行這句代碼,就會創建session對象,如果存在,就指向對象。SessionID是不會變的。


jsp中的session
jsp中均可以訪問session,因爲jsp中翻譯成servlet時,會隱式的加上HttpSession session = request.getSession(true);
所以在jsp中session是一個隱含的對象。所以只要第一次訪問jsp就會創建一個session。


session存活時間限制
在web.xml中可以進行配置
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
<!--單位爲分鐘,如果爲負數或0,表示不限制session-->

session的銷燬
session的銷燬原因歸根結底是超時,長時間不使用就會被服務器銷燬。
1,關閉瀏覽器(其本質還是超時)
  因爲保存SessionID的這個Cookie的MaxAge爲-1,所以瀏覽器關閉後,Cookie就被刪除了,所以SessionID就會丟失。
  丟失後Session無法獲取,獲取不到就無法使用就會被倒計時,然後銷燬。
  根據這個原理,可以實現瀏覽器關閉後繼續使用原來的session。可以將保存SessionID的Cookie的MaxAge搞大點。單位是秒。
  注意的是,記得要重新response.addCookie(Cookie);否則更改了MaxAge也是無效的。
2,超時,這是根本原因。
 


====應用====
session的添加和刪除屬性
session.setAttribute("key",Object value);添加屬性
session.removeAttribute("key");刪除屬性
發佈了35 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章