1. 程式人生 > 其它 >會話跟蹤技術session和cookie

會話跟蹤技術session和cookie

隨筆連結:

Cookie

  • 1.什麼是Cookie
  • 2.Cookie的建立和伺服器的獲取

Session

  • 1.什麼是Session
  • 2.Session的建立和獲取
  • 3.Session域資料的處理
  • 4.Session的生命週期
  • 5.關於Session的兩個問題

會話跟蹤技術Session和Cookie:

HTTP協議是無狀態協議,每個請求都是獨立的,就像魚一樣沒有記憶。也就是說無法記錄前一次請求的狀態,會話跟蹤技術的出現就是解決該問題在一次會話的多個請求間共享資料,這就是會話跟蹤技術。一次會話指的是:瀏覽器第一次給伺服器傳送請求,直到有一方斷開,一次會話中包含多次請求和響應

Cookie

1.什麼是Cookie

  • Cookie由一個鍵和一個值構成的
  • 隨著伺服器端的響應傳送給客戶端瀏覽器。然後客戶端瀏覽器會把Cookie儲存起來,當下一次再訪問伺服器時把Cookie再發送給伺服器
  • 每個 Cookie 的大小不能超過 4kb,對同一個域名下的總cookie數量也有限制(20個)

2.Cookie的建立和伺服器的獲取

Cookie的建立過程:

  1. 建立Cookie
    Cookie cookie = new Cookie("key",value);
  2. 給客戶端響應Cookie物件,通知客戶端儲存Cookie
    response.addCookie(cookie);

伺服器獲取Cookie:

//伺服器獲取Cookie
Cookie[] cookies = request.getCookies();

Session

1.什麼是Session

  • Session:Session 伺服器端會話技術,在一次會話的多次請求間共享資料,將資料儲存在伺服器端的物件HttpSession中

2.Session的建立和獲取

Session的建立和獲取的api是一樣的

request.getSession() 
  • 第一次呼叫是建立 Session 會話

  • 之後呼叫都是獲取前面建立好的 Session 會話物件

3.Session域資料的處理

使用HttpSession物件處理資料時常用的三個api

  1. Object getAttribute(String name)
    根據指定的屬性名稱獲取指定的值,返回結果是Object需要強轉
  2. void setAttribute(String name, Object value)繫結資料到此會話上,資料格式鍵/值對,name屬性名 value屬性值
  3. void removeAttribute(String name)移除繫結的資料,根據鍵(屬性名)移除

4.Session的生命週期

當我們關閉瀏覽器的時候session結束,一直沒有關閉瀏覽器的話,Session 預設的超時時間長為 30 分鐘

因為在 Tomcat 伺服器的配置檔案 web.xml中預設有以下的配置,它就表示配置了當前 Tomcat 伺服器下所有的 Session 超時配置預設時長為:30 分鐘

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

管理Session的生命週期時常用的三個api

  1. public void setMaxInactiveInterval(int interval)設定 Session 的超時時間(以秒為單位),超過指定的時長,Session 就會被銷燬,值為負數時永不超時
  2. public int getMaxInactiveInterval()獲取 Session 的超時時間
  3. public void invalidate()讓當前 Session 會話馬上超時無效

5.關於Session的兩個問題

1.當客戶端關閉後,伺服器不關閉,兩次獲取session是否為同一個?

  • 預設情況下不是,客戶端每次關閉之後,重新訪問會產生一個新的sessionId

  • 如果需要相同,則可以建立Cookie,鍵為JSESSIONID,設定最大存活時間,讓cookie持久化儲存

2.客戶端不關閉,伺服器關閉後,兩次獲取的session是同一個?

  • 不是同一個,但是要確保資料不丟失。tomcat自動完成以下工作

  • session的鈍化

    • 在伺服器正常關閉之前,將session物件序列化到硬碟上

  • session的活化:

    • 在伺服器啟動後,將session檔案轉化為記憶體中的session物件