October 16, 2023

Viiisit [Internet] - Session 與 Cookie 是什麼!

#internet#interview

面試大哉問之超常見的 Session 與 Cookie,本篇就來聊聊一些基礎與相關知識!
Let’s go!

為什麼會有 Session 與 Cookie?

大家是否好奇為什麼會有 Session 與 Cookie?
他們之所以會存在是因為 HTTP 是一種無狀態協議(Stateless Protocol),
無狀態協議換句話說就是每次從客戶端(Client)對伺服器(Server)發出的請求都是獨立的,
伺服器(Server)不會主動保留關於使用者的資訊或狀態。
這意味著在多個請求之間,伺服器無法識別特定使用者或追蹤使用者的狀態,
簡單說就是這次的請求無法得知上次請求的內容與資訊!

為了解決這個問題,Web 應用程式引入 Session 和 Cookie 機制,
以在多個 HTTP 請求之間維護使用者的狀態資訊。


Session 是什麼?

Session 的生活化概念

用一個購物流程來看看 Session 的概念吧!

其實,Session 就是在一段時間內保持的狀態,
剛剛的購物過程就是在 Session 期間與網站中的互動。

在購物過程中,Session 用於保持使用者的狀態訊息,例如購物車內容、登入狀態等。
使用者在 Session 期間與網站進行多次請求和回應,
這些請求和回應在同一 Session 中共享相同的上下文和狀態。

Session 的目的是在一系列相關的操作之間保持用戶的狀態和訊息,
以便提供一種連貫的體驗,就像你在購物過程中需要保持你的購物車狀態一樣。


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)上儲存更大量的狀態資訊。