Cookie
Cookie 是伺服器傳送到使用者瀏覽器並儲存在本地的一小塊資料,它會在瀏覽器下次向同一伺服器再發起請求時被攜帶併傳送到伺服器。
作用:
會話管理: 記錄使用者的登入狀態、購物車內容等。
個性化: 儲存使用者的偏好設定,如語言、主題等。
追蹤: 用於分析使用者行為,進行廣告投放等。
特點:
儲存在客戶端: Cookie 儲存在使用者的瀏覽器中。
大小限制: 通常每個 Cookie 的大小限制為 4KB。
生命週期: 可以設定 Cookie 的過期時間,可以是會話級別的(關閉瀏覽器後失效)或永續性的(指定過期時間)。
安全性: 可以透過設定 HttpOnly 和 Secure 屬性來提高安全性,防止 XSS 和中間人攻擊。
建立和使用:
伺服器透過 HTTP 響應頭 Set-Cookie 來建立 Cookie。
瀏覽器在後續請求中透過 Cookie 請求頭將 Cookie 傳送回伺服器。
示例:
Set-Cookie: sessionId=abc123; Expires=Wed, 09 Jun 2024 10:18:14 GMT; Secure; HttpOnly
2. Session
定義:
Session 是一種伺服器端的狀態管理機制,用於在多個請求之間保持使用者狀態。
作用:
會話管理: 儲存使用者的登入狀態、購物車內容等。
資料儲存: 儲存使用者相關的臨時資料,如表單資料、使用者偏好等。
特點:
儲存在伺服器端: Session 資料儲存在伺服器上,通常儲存在記憶體、資料庫或檔案系統中。
會話標識: 通常使用一個唯一的會話 ID(Session ID)來標識使用者會話,這個 ID 通常透過 Cookie 傳遞給客戶端。
生命週期: 會話通常在使用者關閉瀏覽器或伺服器端設定的超時時間後失效。
建立和使用:
伺服器在使用者首次訪問時建立一個會話,並生成一個唯一的會話 ID。
伺服器將這個會話 ID 透過 Cookie 傳送給客戶端。
客戶端在後續請求中透過 Cookie 攜帶會話 ID,伺服器根據會話 ID 查詢對應的會話資料。
示例:
伺服器建立會話並設定會話 ID:
Set-Cookie: sessionId=abc123; HttpOnly
客戶端請求時攜帶會話 ID:
Cookie: sessionId=abc123
3. Cookie 和 Session 的關係
依賴關係: Session 通常依賴於 Cookie 來傳遞會話 ID。
安全性: Session 比 Cookie 更安全,因為敏感資料儲存在伺服器端,而不是客戶端。