Just My Life & My Work

Cookie 與 Session 的差異

若是外行人來看,會以為只是「餅乾」和「會話」,有什麼好比較~😛

現在進入各大網站,第一次進去大多會跳出提示,詢問用戶是否接受 Cookie 記錄其行為資料。此時我就好奇,Session 與 Cookie 的差異,過去以為只是大同小異的名詞,用途是差不多的。現在想要詳細了解其原理與差異。🙃

為何會有 Cookie 與 Session?

Cookie 和 Session 是為了解決 HTTP 的「無狀態」特性而設計的機制,這意味著每次客戶端(例如瀏覽器)與伺服器之間的請求都是獨立的,伺服器不能自動記住先前的請求。為了實現在一個連續的用戶互動中保持狀態訊息,開發者們引入了 Cookie 和 Session 這兩種機制。

主要原因包括:

  1. 用戶狀態管理: 網站或應用程式通常需要追蹤和管理用戶的狀態,例如用戶是否已經登錄、在購物車中加入了哪些商品、首選項設定等。Cookie 和 Session 提供了一種在連續請求之間保持這些訊息的方法。
  2. 個性化和持久性: Cookie 和 Session 允許應用程式向用戶提供個性化的體驗。例如,用戶在一次訪問中設定的首選項應該在下一次訪問中保持。Cookie 通常用於存儲持久性的小型資料,而 Session 則可以用於存儲較大、較為臨時的資料。
  3. 購物車和訂單: 在電子商務網站中,購物車和訂單訊息是用戶會話中的關鍵資料。使用 Cookie 和 Session,可以跨多個頁面和請求保存這些訊息,以確保用戶的購物體驗是連續的。
  4. 用戶身份驗證: Cookie 和 Session 也用於處理用戶身份驗證。當用戶成功登錄時,可以生成一個身份驗證的 Session,並將其存儲在伺服器上,以後的每次請求都可以檢查這個 Session,確保用戶是合法的。

總結,Cookie 和 Session 是在 Web 開發中常見的機制,它們使得開發者能夠管理和保持用戶在應用程式中的狀態,提供更好的用戶體驗和個性化服務。

用生活中的例子說明 Cookie 與 Session

想像你是一位商店的老闆,而這個商店是一家線上購物平台。Cookie 和 Session 的概念可以透過下面的例子更容易理解:

Cookie 的例子:

你的客戶進入你的商店,瀏覽一些商品,然後將一些商品加入購物車。當客戶加入商品到購物車時,你給他發放了一張「購物清單」的小紙條,上面記載了他想購買的商品。

這張小紙條就相當於在網頁上使用的 Cookie。它存儲了一些較小、不敏感的訊息(購物清單),並且當客戶再次訪問你的商店時,他可以攜帶這張小紙條,你可以根據上面的訊息知道他之前想要購買的商品,這樣他就不需要重新挑選。

Session 的例子:

現在,想像同一位客戶再次進入你的商店,但這次你不再給他一張購物清單的小紙條。相反,你給他一個「購物籃」,並在你的店內為他準備了一個專屬的購物籃存放區域。

這個購物籃存放區域就像是伺服器上的 Session。當客戶加入商品到購物籃時,商品會直接放在這個購物籃中,而不是一張小紙條上。只要客戶在你的商店內,他都可以隨時訪問這個購物籃,查看他已經選擇的商品。

在這個例子中,購物籃(Session)存放在商店伺服器上,而不是客戶手上的小紙條(Cookie)。這樣,即使客戶在同一個瀏覽器中開啟了不同的標籤,他們仍然可以訪問同一個購物籃,就像在同一個商店內使用同一個購物籃一樣。

Cookie 與 Session 有何差別?

Cookie 和 Session 都是在 Web 開發中用來管理使用者狀態的機制,但它們有一些重要的區別:

  1. 存放位置:
    • Cookie: 是在客戶端(使用者的瀏覽器)存放的少量資料,通常由伺服器在 HTTP 回應標頭中發送到客戶端,然後由瀏覽器保存。
    • Session: 是在伺服器端存放的資料結構,用來保存特定用戶的訊息。通常,伺服器會為每個訪問網站的用戶創建一個唯一的 Session。
  2. 資料存儲:
    • Cookie: 存放的是少量的資料,可以在客戶端進行存儲,並在每次 HTTP 請求時都會被發送到伺服器。
    • Session: 可以存儲較大量的資料,因為它是存在伺服器上的。伺服器會為每個 Session 分配一個唯一的識別碼,通常是一個被稱為 Session ID 的字符串。
  3. 安全性:
    • Cookie: 存放在客戶端,因此可能會有安全風險,如跨站腳本攻擊(XSS)和跨站請求偽造(CSRF)。
    • Session: 存放在伺服器端,相對於 Cookie,通常被認為更安全。但仍然需要注意適當的伺服器端安全實作。
  4. 生命週期:
    • Cookie: 可以設定過期時間,可以是一段時間後失效,也可以在瀏覽器關閉後失效(會話 Cookie)。
    • Session: 通常在用戶關閉瀏覽器或一定時間內無活動後失效,但這是在伺服器端控制的。

總結,Cookie 主要用於在客戶端保持一些簡單的狀態訊息,而 Session 則用於在伺服器端保持更複雜的狀態訊息。在實際應用中,它們經常一起使用,Cookie 中存放 Session ID,而相應的用戶資料則存放在伺服器端的 Session 中。

Cookie 與 Session 運作流程

  1. 瀏覽器發送帳號密碼到 Server
  2. Server 驗證帳號密碼成功後便產生一組 Session Id 放在資料庫
  3. Server 將 Session Id 放入 Cookie 後回傳給瀏覽器
  4. 下次進入網站時,Request 中 Cookie 的 Session Id 會一併傳給 Server,若是 Session Id 有效(包含時效),則會繼續處理這個 Request
  5. 當用戶登出時需將資料庫和 Cookie 內的 Session Id 清除

有圖解,就很好理解~😎

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲