1. 程式人生 > >會話(Session)概述

會話(Session)概述

為什麼要使用會話(Session)

會話用於維持請求和請求之間的狀態——HTTP請求自身是完全無狀態的,從伺服器的角度來說,一個請求結束之後伺服器和客戶端就不再有任何聯絡。

會話使得系統能夠以某種方式“記住”使用者。

會話儲存在服務端。

通常來說,會話會被賦予一個隨機生成的字串,稱為會話ID(SessionID)。第一次建立會話時,SessionID會作為響應的一部分返回到使用者瀏覽器中,接下來從該使用者瀏覽器中發出的請求都會通過某種方式包含該會話ID,當服務端接收到含有會話ID的請求時,它可以根據該會話ID將會話與當前的請求關聯起來。

目前有兩種方式可以將會話ID從服務端(C)返回到客戶端(B)中:cookie和URL重寫

cookie

Http cookie是一種通訊機制,可以通過Set-Cookie響應頭在伺服器和瀏覽器之間傳遞任意資料,並存儲在客戶端當中,然後再通過請求頭中的Cookie從瀏覽器返回到服務端當中。 Cookie有多個特性,如域名、路徑、過期日期、最大生命週期、安全標示或HTTP的標誌。

  • Domain(域名)將告知瀏覽器應該講cookie傳送到那個域名中
  • Path將cookie限制在某個域的特定URL中,每次瀏覽器發起請求時,它都會匹配該域和路徑的所有cookie,然後將cookie隨著請求一起傳送到伺服器
  • Expires定義了cookie的絕對過期日期,如果過期日期是過去,則瀏覽器會立即刪除他
  • Max-Aeg與上一個互斥定義了cookie在過期之前所需的秒數
  • 如果瀏覽器不包含Expires和Max-Age,則會在瀏覽器關閉時刪除cookie
  • Secure(不需要有值),如果有該屬性,則瀏覽器只會通過HTTPS傳送cookie
  • HttpOnly會把cookie限制在直接的瀏覽器請求中,其他技術如js和Flash將無法訪問cookie

在JavaEE應用伺服器中,cookie的名字預設為JSESSIONID

url中的會話ID

JEE中,會話ID被新增到URL的最後一個路徑的矩陣引數中,通過這種方式來分離查詢字串引數和會話ID,使其不相互衝突,如 http://www.baidu.com/happy;JSESSIONID=XxxxXxxxxxxX?username=1111&pwd=2222