面試大哉問之超常見的 Session 與 Cookie,本篇就來聊聊一些基礎與相關知識!
Let’s go!
為什麼會有 Session 與 Cookie?
大家是否好奇為什麼會有 Session 與 Cookie?
他們之所以會存在是因為 HTTP 是一種無狀態協議(Stateless Protocol),
無狀態協議換句話說就是每次從客戶端(Client)對伺服器(Server)發出的請求都是獨立的,
伺服器(Server)不會主動保留關於使用者的資訊或狀態。
這意味著在多個請求之間,伺服器無法識別特定使用者或追蹤使用者的狀態,
簡單說就是這次的請求無法得知上次請求的內容與資訊!
為了解決這個問題,Web 應用程式引入 Session 和 Cookie 機制,
以在多個 HTTP 請求之間維護使用者的狀態資訊。
Session 是什麼?
Session 的生活化概念
用一個購物流程來看看 Session 的概念吧!
- 當你第一次進入購物網站,伺服器(Server)並不知道你是誰或你在做什麼。
- 你開始在商店裡挑選商品,並放入購物車中。
購物車就會是你目前的狀態,包含了你在這次購物過程中的所選物品。 - 當你決定購買商品時,你前往結帳,也就是你提交了一個訂單,需要提供付款資訊。
在這一步,商店需要知道你的購物車內容和金額。 - 你提供了信用卡資訊並付款,同時,購物網站處理你的付款訊息,更新你的帳戶狀態,
並將訂單標記為已完成。 - 當你離開網站時,伺服器結束了你的 Session,清除了你的狀態訊息,這有助於保護你的隱私。
例如購物車內容和登入狀態。下次當你再次訪問這個網站時,你將從頭開始。
其實,Session 就是在一段時間內保持的狀態,
剛剛的購物過程就是在 Session 期間與網站中的互動。
在購物過程中,Session 用於保持使用者的狀態訊息,例如購物車內容、登入狀態等。
使用者在 Session 期間與網站進行多次請求和回應,
這些請求和回應在同一 Session 中共享相同的上下文和狀態。
Session 的目的是在一系列相關的操作之間保持用戶的狀態和訊息,
以便提供一種連貫的體驗,就像你在購物過程中需要保持你的購物車狀態一樣。
Cookie 是什麼?
Cookie 生活化概念
Cookie 用於在使用者的電腦上儲存小段資料,
以生活上的例子來看的話,Cookie 就像你在咖啡店裡點咖啡時得到的取餐明細。
- 想像一下,你走進了一家咖啡店,想要點一杯咖啡。當你點咖啡時,店員給你一張取餐明細,上面有你點的咖啡與相關資訊。
- 這張取餐明細就像是你的 Cookie,包含了你點的咖啡相關的資訊。
- 假如你還想再點一杯咖啡,你只需出示那張取餐明細,店員就知道你之前點了什麼咖啡,然後可以為你準備相同的咖啡。你不需要每次都重新告訴店員你想要什麼。
- 但是,這張取餐明細可能有一些限制。例如,只能在這家咖啡館取用,或者他可能有一個有效期,過了有效期就不能再使用。
取餐明細就像是 Cookie 是一個小的資料片段。
在網頁瀏覽中,Cookie 是由伺服器(Server)傳送到你的瀏覽器的小段資料,然後在你的電腦上儲存。
這些 Cookie 可以包含有關你在網站上的活動的信息,例如登入狀態、購物車內容或使用者首選項。
當你再次造訪網站時,瀏覽器將發送這些 Cookie 給伺服器(Server),
以便伺服器(Server)可以識別你,並提供與你之前的互動相關的個人化體驗。
就像在咖啡店中,取餐明細允許你保持與之前點單相關的狀態訊息,
Cookie 也允許你在不同的網頁之間保持與先前活動相關的狀態資訊。
Cookie 是由伺服器(Server)傳送給瀏覽器的小段資料。當你造訪一個網站時,
伺服器可以在回應中包含一個 Set-Cookie 的 Header,用於在瀏覽器中設定 Cookie。
瀏覽器會將這些 Cookie 儲存在使用者的電腦上以便在不同的 HTTP 請求之間保持和傳遞訊息。
但 Cookie 是存在 Client 端的資料,在安全性上會有被篡改資料的風險,因此機密的資料不建議存放!而且如果 Cookie 中數據太多會影響傳輸效率。
Brief Summary
Cookie 和 Session 的主要區別在於儲存位置和資料容量。
Cookie 儲存在使用者的瀏覽器中,通常用於儲存小型數據,例如使用者的識別碼(Session ID)。
Cookie 的資料容量有限,並且在使用者的電腦上儲存。他們通常有一個指定的生存期,可以是 Session 層級(瀏覽器關閉後刪除)或持久性(在瀏覽器中儲存一段時間)。
Session 資料儲存在伺服器(Server)上,通常用於儲存大量的狀態訊息。
Session 資料在伺服器記憶體或資料庫中保存,通常安全性較高。而,Session 通常在使用者關閉瀏覽器時結束,或者可以設定逾時時間,也可以在伺服器(Server)手動終止。
因此,Cookie 主要用於在使用者瀏覽器中儲存少量數據,而 Session 用於在伺服器(Server)上儲存更大量的狀態資訊。