Session Tracking

Stateful vs Stateless

Stateful (有狀態)

FTP:屬於 Stateful 的通訊協定,從使用者登入開始,伺服器會一直記住使用者,直到登出。

Stateless (無狀態)

HTTP:屬於 Stateless 的通訊協定,無法記住使用者,只關心 Request 和 Response。

追蹤使用者

為了使 HTTP 請求的狀態,維持狀態(state) 到下一個請求,並辨認是同一個 Client 端發出的。

一個網站通常為了進行一連串的操作,通常使用 SessionCookie 的方式記住使用者。

例如:

購物車、下次再訪、個人化服務等等。

實作 - 如何追蹤

隱藏欄位

說明:Hidden Form Field,使用HTML 內 <input> 的 type:hidden 屬性。

優點:主要瀏覽器都支援,且瀏覽器不會顯示在畫面上,不需 Server 授權即可使用。

缺點:只能用於一連串的 Form 表單,client 端可以自行修改,安全漏洞。

時機:非重要資料、短程傳送。

URL 重寫

說明:Url Rewriting,在 URL 尾端帶上 sessionId=XXX;,即當作Path 或 queryString 使用。

優點:瀏覽器伺服器皆支援。

缺點:資料暴露在外,且大部分的 security framework 都已經帶有阻擋。

時機:不支援 cookie 或 cookie 被關閉的瀏覽器較有幫助。

說明:一個文字檔,以 key/value 紀錄其資料,通常存在瀏覽器暫存或硬碟中。

優點:容易實作,部分容器會搭配 session 作為狀態維持方式一起使用。

缺點:最大長度 4KB,且網站與瀏覽器有額度限制,太敏感資料也不宜儲存在 Cookie。

Session(常用)

說明:一種紀錄服務器和客戶端之間狀態的機制。

主要仰賴 Cookie 實現(透過 sessionId),非不必要,也可以透過上述的 URL重寫 或 隱藏欄位。

Servlet API

透過 HttpSession 的方式。

使用 Tomcat 一般會帶有 jsessionId 的參數結合 Cookie 做攜帶,作為辨識。

Token

說明:訪問資源介面(API)時所需要的憑證,由應用管理,不受同源政策(CORS) 影響。

一般常使用在認證授權,搭配 JWT 使用。

比較

Cookie

Session

Token

解決問題

使 HTTP 有狀態

使 HTTP 有狀態

使服務無狀態化

保存位置

客戶端

伺服器端

應用管理 不受同源政策影響

安全性

優於 Cookie

是否有期限

參考資料

Last updated

Was this helpful?