Session Tracking
Stateful vs Stateless
Stateful (有狀態)
FTP:屬於 Stateful 的通訊協定,從使用者登入開始,伺服器會一直記住使用者,直到登出。
Stateless (無狀態)
HTTP:屬於 Stateless 的通訊協定,無法記住使用者,只關心 Request 和 Response。
追蹤使用者
為了使 HTTP 請求的狀態,維持狀態(state) 到下一個請求,並辨認是同一個 Client 端發出的。
一個網站通常為了進行一連串的操作,通常使用 Session 或 Cookie 的方式記住使用者。
例如:
購物車、下次再訪、個人化服務等等。
實作 - 如何追蹤
隱藏欄位
說明:Hidden Form Field,使用HTML 內 <input> 的 type:hidden
屬性。
優點:主要瀏覽器都支援,且瀏覽器不會顯示在畫面上,不需 Server 授權即可使用。
時機:非重要資料、短程傳送。
URL 重寫
說明:Url Rewriting,在 URL 尾端帶上 sessionId=XXX;,即當作Path 或 queryString 使用。
優點:瀏覽器伺服器皆支援。
時機:不支援 cookie 或 cookie 被關閉的瀏覽器較有幫助。
Cookie(常用)
說明:一個文字檔,以 key/value 紀錄其資料,通常存在瀏覽器暫存或硬碟中。
優點:容易實作,部分容器會搭配 session 作為狀態維持方式一起使用。
Session(常用)
說明:一種紀錄服務器和客戶端之間狀態的機制。
主要仰賴 Cookie 實現(透過 sessionId),非不必要,也可以透過上述的 URL重寫 或 隱藏欄位。
Servlet API
透過 HttpSession 的方式。
Token
說明:訪問資源介面(API)時所需要的憑證,由應用管理,不受同源政策(CORS) 影響。
一般常使用在認證授權,搭配 JWT 使用。
Cookie / Session / Token 比較
比較
Cookie
Session
Token
解決問題
使 HTTP 有狀態
使 HTTP 有狀態
使服務無狀態化
保存位置
客戶端
伺服器端
由應用管理 不受同源政策影響
安全性
低
優於 Cookie
高
是否有期限
有
有
有
參考資料
Last updated
Was this helpful?