Session

Session技術是將數據存儲在服務器端的技術,會爲每一個客戶端都建立一塊內存空間存儲客戶的數據,但客戶端須要每次都攜帶一個標識ID去服務器中尋找屬於本身的內存空間。因此說Session的實現是基於Cookie,Session須要藉助於Cookie存儲客 戶的惟一性標識JSESSIONID。web

 

得到Session對象

 

HttpSession session = request.getSession();

 

此方法會得到專屬於當前會話的Session對象,若是服務器端沒有該會話的Session 對象會建立一個新的Session返回,若是已經有了屬於該會話的Session直接將已有 的Session返回(實質就是根據JSESSIONID判斷該客戶端是否在服務器上已經存在 session了)瀏覽器

 

怎樣向session中存取數據(session也是一個域對象)

 

Session也是存儲數據的區域對象,因此session對象也具備以下三個方法:服務器

 

session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);

 

Session對象的一些方法

 

複製代碼
    HttpSession session = request.getSession();
        
    System.out.println(session.getCreationTime()); //建立時間 System.out.println(session.getLastAccessedTime());//最後一次訪問session的時間 System.out.println(session.getId() );//得到sessionID System.out.println(session.getMaxInactiveInterval());//得到最大存活時間

   //setMaxInactiveInterval(int interval)
   //invalidate 當即銷燬session
   System.out.println(session.isNew());//查看當前得到的session是不是新的.只有在第一訪問服務器,session是新的.
   session.invalidate();session

複製代碼

 

Session對象的生命週期

 

建立:第一次執行request.getSession()時建立spa

 

銷燬:code

 

  1. 服務器(非正常)關閉時
  2. session過時/失效(默認30分鐘)

 

時間的起算點從什麼時候開始計算30分鐘?

 

從不操做服務器端的資源開始計時,能夠在工程的web.xml中進行配置xml

 

<session-config> <session-timeout>30</session-timeout> </session-config>

 

手動銷燬session

 

session.invalidate();

 

做用範圍

 

默認在一次會話中,也就是說在,一次會話中任何資源公用一個session對象。對象

 

問題:瀏覽器關閉,session就銷燬了? 

 

沒有,存在於瀏覽器上的惟一標識符JSESSIONID(sessionid)消失了,可是服務器中存放的sessionid並無立馬銷燬。blog

 

  • 當在同一個瀏覽器中同時打開多個標籤,發送同一個請求或不一樣的請求,還是同一個session;
  • 當不在同一個窗口中打開相同的瀏覽器時,發送請求,還是同一個session;
  • 當使用不一樣的瀏覽器時,發送請求,即便發送相同的請求,是不一樣的session;
  • 當把當前某個瀏覽器的窗口全關閉,再打開,發起相同的請求時,是不一樣的session。
相關文章
相關標籤/搜索