1. 程式人生 > 實用技巧 >http會話技術

http會話技術

會話技術

會話:一個會話中包含多次請求和響應。

一次會話:瀏覽器第一次給伺服器資源傳送請求、會話建立,直到一方斷開為止。

功能:在一次會話的範圍內的多次請求間,共享資料

方式:

  • 客戶端會話技術:Cookie,資料儲存在客戶端
  • 伺服器端會話技術:Session,資料儲存在伺服器

Cookie

快速入門

  1. 伺服器(Servlet)建立cookie物件,繫結資料

    new Cookie(String name, String value)

  2. 伺服器傳送cookie物件(瀏覽器自動儲存)

    resp.addCookie(cookie)

  3. 瀏覽器第二次訪問伺服器時,伺服器會獲取cookie物件,拿到資料

    Cookie[] req.getCookies()

cookie是存在請求頭和響應頭傳遞

  1. 一次 可不可以傳送多個cookie?
    • 可以,多建立幾個cookie物件,新增就可以了。
  2. cookie在瀏覽器儲存多長時間?
    • 預設情況下,瀏覽器關閉,cookie被銷燬。
    • 持久化儲存:
      • cookie.setMaxAge(正數) 存到硬碟xx秒;
      • cookie.setMaxAge(負數) 預設值;
      • cookie.setMaxAge(0) 刪除cookie資訊。
  3. cookie能不能存中文?
    • 在tomcat 8之前,不可以儲存中文。
    • 在tomcat 8之後,可以儲存中文,但是不支援特殊字元,需要URL編碼:
      • 編碼 str = URLEncoder.encode(str, "utf-8");
      • 解碼 str = URLDecoder.decode(str, "utf-8");
  4. cookie資料共享範圍?
    • 一個伺服器,部署多個web專案之間,預設不能共享
    • 預設是設定 cookie.setPath("/當前虛擬路徑")
    • 如果整個伺服器 共享,可以設定為 :cookie.setPath("/")
  1. cookie儲存在客戶端
  2. 單個cookie的大小限制在4kb,並且同一個域名下的總的cookie數量也有限制。
  3. cookie一般儲存少量的不太敏感的資料
  4. 在不登入的情況下,完成伺服器對客戶端的身份識別。

Session

快速入門

  1. 儲存session

    HttpSession session = req.getSession();
    session.setAttribute("msg", "hello");
    
  2. 獲取session (另一個servlet檔案)

    HttpSession session = req.getSession();
    Object msg = session.getAttribute("msg");
    System.out.println(msg);
    

session原理

session依賴cookie:

  1. 第一次建立session物件時;
  2. 伺服器會建立一個cookie,cookie指向session;(JsessionID: xxx
  3. 第二次訪問時,伺服器會根據cookie資訊,查詢到session物件。

session細節

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

    • 預設不是,如果需要,建立cookie,設定最大儲存時間:

      HttpSession session = req.getSession();
      Cookie c = new Cookie("JSESSIONID", session.getId());
      c.setMaxAge(60*60);
      resp.addCookie(c);
      
  2. 當客戶端不關閉,伺服器關閉後,兩次獲取session是同一個嗎?

    • 不是,因為建立了兩次物件,地址不一樣,但是tomcat自動完成以下工作:
      • session的鈍化:在伺服器關閉前,將session物件儲存在硬碟上
      • session的活化:在伺服器啟動後,將session檔案轉化為物件
  3. session什麼時候被銷燬?

    • 伺服器關閉
    • session物件呼叫invalidate()
    • session預設失效時間 30分鐘
      • 修改tomcat配置檔案tomcat/conf/web.xml 所有專案的父配置檔案
      • 修改<session-timout>30</session-timeout>
      • 也可以在專案的web/WEB-INF/web.xml修改

session特點

session特點:

  1. 用於儲存一次會話、多次請求的資料,儲存在伺服器
  2. 可以儲存任意大小的資料

session與cookie區別

  • session儲存伺服器端,cookie儲存客戶端
  • session資料安全,cookie相對不安全
  • session沒有資料大小限制,cookie有資料大小限制