探討Web開發中的Session儲存與管理

動力節點Java學院發表於2018-12-12

我們都知道,由於HTTP協議是無狀態的協議,一次瀏覽器和伺服器的互動過程就是:

瀏覽器:你好嗎?

伺服器:很好!

這就是一次會話,對話完成後,這次會話就結束了,伺服器端並不能記住這個人,下次再對話時,伺服器端並不知道是上一次的這個人,所以服務端需要記錄使用者的狀態時,就需要用某種機制來識別具體的使用者,這個機制就是Session;

 

服務端如何識別特定的客戶?這個時候需要使用Cookie;

每次HTTP請求的時候,客戶端都會傳送相應的Cookie資訊到服務端,用 Cookie 來實現Session跟蹤的,第一次建立Session時,服務端會在HTTP協議中向客戶端 Cookie 中記錄一個Session ID,以後每次請求時會把這個會話ID傳送到伺服器,這樣服務端就知道客戶端是誰了;

 

那麼如果客戶端的瀏覽器禁用了 Cookie 怎麼辦? 

一般這種情況下,會使用一種叫做URL重寫的技術來進行session會話跟蹤,即每次HTTP請求,URL後面都會被附加上一個諸如 sessionId=xxxxx 這樣的引數,服務端據此來識別客戶端是誰;

 

Session會話管理及帶來的問題

在Web專案開發中,使用Session來儲存與記錄使用者的狀態或者相關的資料;

通常情況下Session交由容器(Tomcat)來負責儲存和管理,但是如果專案部署在多臺Tomcat中,則Session管理存在很大的問題;

1、多臺Tomcat之間無法共享Session,比如使用者在Tomcat A伺服器上已經登入了,但當負載均衡跳轉到Tomcat B時,由於Tomcat B伺服器並沒有使用者的登入資訊,Session就失效了,使用者就退出了登入;

2、一旦Tomcat容器關閉或重啟也會導致Session會話失效;

 

因此如果專案部署在多臺Tomcat中,就需要解決Session共享的問題,有關session共享問題的解決方案,可以瞭解一下動力節點Java視訊教程

相關文章