Session和Cookie的定義是什么?他們之間有什么區別?
一、什么是 Cookie?
Cookie 是一小段文本信息(最多約4KB),由服務器生成并發送給瀏覽器,瀏覽器會將其保存在用戶本地。此后,瀏覽器每次向同一服務器發起請求時,都會自動攜帶這個 Cookie。
主要特點:
-
存儲位置:客戶端(瀏覽器)。
-
生命周期:可設置有效期。可以是會話級(瀏覽器關閉即失效),也可以設置一個未來的過期時間。
-
參與方:服務器創建,瀏覽器保存和發送。
-
安全性:相對較低,因為存儲在客戶端,可能被用戶查看或篡改。不應存儲敏感信息(如密碼)。
常見用途:
-
記錄用戶偏好:如語言設置、主題樣式(深色/淺色)。
-
記錄非關鍵信息:如購物車商品ID(未登錄時)。
-
用戶追蹤:廣告商用來記錄用戶的瀏覽習慣。
Cookie 的工作流程:

二、什么是 Session?
Session 是一種在服務器端保存用戶狀態信息的機制。因為 HTTP 協議是無狀態的,Session 被用來跟蹤用戶在整個網站訪問期間的行為。
核心思想:
服務器為每個用戶創建一個唯一的標識(稱為 Session ID),并通過 Cookie 將這個 ID 傳遞給瀏覽器。瀏覽器后續的請求都會帶著這個 Session ID。服務器通過這個 ID 來找到對應的服務器端存儲的數據(如用戶ID、登錄狀態等)。
主要特點:
-
存儲位置:服務器端(內存、文件、數據庫等)。
-
生命周期:從用戶會話開始到結束(通常有超時時間,如用戶30分鐘無活動則失效)。
-
安全性:相對較高,因為敏感數據存儲在服務器端,客戶端只保存一個無意義的ID。
-
存儲量:理論上只受服務器資源限制。
常見用途:
-
用戶登錄狀態:這是最經典的用法。登錄成功后,服務器在 Session 中記錄
user_id = 123。 -
購物車信息(已登錄用戶)。
-
表單令牌(CSRF Token):用于防止跨站請求偽造。
Session 的工作流程(結合Cookie):

三、核心區別總結(表格對比)
| 特性 | Cookie | Session |
|---|---|---|
| 存儲位置 | 客戶端(瀏覽器) | 服務器端 |
| 數據類型與大小 | 只能是字符串,大小有限制(約4KB) | 可以是任意對象(如Java對象),大小理論上無限 |
| 安全性 | 較低,數據存儲在客戶端,可能被查看和篡改 | 較高,敏感數據存儲在服務器,客戶端只有ID |
| 生命周期 | 可長期有效,由過期時間控制 | 通常較短,瀏覽器關閉或超時后失效 |
| 性能影響 | 不占用服務器資源,但每次請求都會攜帶,增加帶寬 | 占用服務器內存/存儲,用戶量巨大時影響性能 |
| 依賴性 | 可以獨立使用 | 通常依賴于 Cookie 來傳遞 Session ID |
四、一個典型的登錄場景(綜合運用)
-
登錄請求:用戶在登錄頁面輸入用戶名和密碼,點擊提交。
-
驗證身份:服務器驗證憑證正確。
-
創建Session:服務器在內存(或數據庫)中創建一個新的 Session,并存入
user_id等關鍵信息。 -
設置Cookie:服務器生成一個唯一的 Session ID,并通過響應頭的
Set-Cookie字段發送給瀏覽器(例如:Set-Cookie: session_id=abc123; Path=/)。 -
保存Cookie:瀏覽器收到指令,將
session_id=abc123這個 Cookie 保存起來。 -
訪問其他頁面:當用戶訪問網站的個人中心時,瀏覽器會自動在請求頭中帶上這個 Cookie:
Cookie: session_id=abc123。 -
識別用戶:服務器收到請求,取出
session_id的值abc123,然后在自己的 Session 存儲中查找abc123對應的數據,找到了user_id。 -
返回內容:服務器知道這是用戶123,于是從數據庫拉取用戶123的個人信息,生成頁面返回給瀏覽器。
-
登出:用戶點擊退出登錄,服務器端銷毀對應的 Session 數據。即使瀏覽器的 Cookie 還在,也無法再找到有效的 Session。
重要補充:如果用戶禁用了Cookie怎么辦?
Session 機制默認依賴 Cookie。如果用戶禁用了 Cookie,就需要其他方式來傳遞 Session ID,最常見的方法是 URL 重寫。即,服務器在生成每個鏈接時,自動將 Session ID 作為參數附加在 URL 后面。
例如:原本的鏈接是 https://example.com/profile,會變成 https://example.com/profile;jsessionid=abc123。
這種方式不夠安全(URL 可能被記錄、分享)且不方便,但是一種備選方案。
結論
-
Cookie 是客戶端的存儲機制,用于保存一些不敏感的小數據,并實現狀態的持久化。
-
Session 是服務器端的狀態管理機制,用于保存敏感或重要的用戶會話數據。
-
它們不是對立的選擇,而是協作的伙伴。在典型的 Web 應用中,Session 利用 Cookie 來傳遞識別用戶身份的 ID,從而將無狀態的 HTTP 協議變得有狀態。

浙公網安備 33010602011771號