1. 程式人生 > >Cookie-Session機制

Cookie-Session機制

方式 服務器 信息 請求 服務端 過去的 rev 原理 地址重寫

1.什麽是Session

HTTP協議本身是無狀態的,瀏覽器的每一次請求都是獨立的,瀏覽器不會保存過去的請求信息。服務器為了記錄用戶的狀態就需要使用某種機制來保持會話,在Http傳輸中采用了Session機制。
Session代表服務器與瀏覽器的一次會話過程,這個過程是連續的,也可以時斷時續的。在Servlet中,session指的是HttpSession類的對象。

2.如何維持會話


服務器創建Session後,會把Session的id號,以cookie的形式回寫給瀏覽器,以後在訪問符合cookie規則的頁面時,瀏覽器會把這個cookie添加到請求頭發送給服務器,服務器接收到這個cookie時會匹配id號找到當前瀏覽器的會話。 ID通常是 NAME 為 JSESIONID 的一個 Cookie。

  • HTTP和COOKIE交互:
    服務器端響應給客戶端對應的Set-Cookie。包括了對應的cookie的名稱,值,以及各個屬性。

3.Servlet中的HttpSession


  • Session創建的時間:
    一個常見的誤解是以為Session在有客戶端訪問時就被創建,然而事實是直到某servlet端程序調用 HttpServletRequest.getSession(true)這樣的語句時才被創建,JSP會默認調用,如果不打算使用session,應該在所有的JSP中關閉它。

  • Session刪除的時間:

    • Session超時:超時指的是連續一定時間服務器沒有收到該Session所對應客戶端的請求,並且這個時間超過了服務器設置的Session超時的最大時間。
    • 程序調用HttpSession.invalidate()
    • 服務器關閉或服務停止
  • Session會因為瀏覽器的關閉而刪除嗎?
    不會,session只會通過上面提到的方式去關閉。

  • Session存放在哪裏:
    服務器端的內存中。不過session可以通過特殊的方式做持久化管理,比如寫入數據庫或文件中

  • Session是一個容器,可以存放會話過程中的任何對象。

  • Session的創建和使用總在服務端,而瀏覽器從來都沒得到過session對象。但瀏覽器可以請求Servlet來獲取session的信息。客戶端瀏覽器僅僅拿到的是sessionID。

4.URL地址重寫維持會話


URL地址重寫是對客戶端不支持Cookie的解決方案。URL地址重寫的原理是將該用戶Session的id信息重寫到URL地址中。服務器能夠解析重寫後的URL獲取Session的id。這樣即使客戶端不支持Cookie,也可以使用Session來記錄用戶狀態。HttpServletResponse類提供了encodeURL(Stringurl)實現URL地址重寫。
該方法會自動判斷客戶端是否支持Cookie。如果客戶端支持Cookie,會將URL原封不動地輸出來。如果客戶端不支持Cookie,則會將用戶Session的id重寫到URL中。

Cookie-Session機制