2020-10-06

從寬處理發表於2020-10-06

淺談JSESSIONID

以下內容為筆者個人淺見,如有錯誤還望指正。

1.HTTP請求
瞭解了HTTP請求之後發現他是無狀態的,也就是即便是同一個客戶端訪問,伺服器通過HTTP請求頭也無法得知客戶端以前是否訪問過伺服器。因此,伺服器會把客戶端的每一個請求都當做全新的請求進行處理。

2.缺點
不僅會使伺服器和客戶端多出很多重複的系統開銷,還會極大的減低效能,影響使用者體驗。比如一個使用者登入了網站,但當他重新傳送一些新的請求時,伺服器便無法記住該使用者的登入狀態,使得使用者又要重新登入。

3.解決
解決方案很簡單,竟然http是無狀態的,那麼讓他變成有狀態的,儲存客戶端和伺服器的操作記錄不就可以了嗎?
利用session來彌補http無狀態的特性,利用JSESSIONID來區分是不是同一會話,JSESSIONID相同則是同一會話,JSESSIONID儲存在客戶端的Cookie中,通過http的請求頭髮送給伺服器。
4.以下是筆者觀察到的不同情況下http請求頭中JSESSIONID變化的一些規律————訪問同一網站

  1. 不同的瀏覽器訪問會生成不同的JSESSIONID
  2. 清除Cookie後會生成不同的JSESSIONID
  3. 重啟瀏覽器會生成不同的JSESSIONID
  4. 在瀏覽器不關閉的情況下,重啟伺服器不會改變請求頭裡的JSESSIONID

5.提問

  1. Cookie和session的關係?
  2. 關閉Coolie之後會有什麼影響,伺服器如何區分同一會話?

註釋:本文為初略瞭解之後的學習記錄,並沒有深入理解其機制,待深入瞭解之後再做進一步分析