Web在講儲存機制的時候,通常會提到HTTP、session、cookie、local storage和session storage這幾個名詞。
這個系列會先來了解HTTP、session和cookie,其中cookie比較好懂會放到第二篇再解釋,而"session" 正確地來說應該是HTTP Session,因為session比較難理解而且容易和有Session ID的 Cookie搞混,因此這篇會先從HTTP開始著手並且先了解session。
HTTP
這邊先問兩個問題複習一下網路和HTTP協定,(1)「當使用者點擊網站頁面的時候發生了什麼事?」以及 (2)「HTTP在瀏覽器發送請求、從伺服器取得回應的訊息(或資訊)傳輸過程扮演什麼角色?」
第一個問題是:「當使用者點擊網站頁面的時候發生了什麼事?」
為了簡化這篇文章的內容,以下用非常簡單的案例來說明:
首先,使用者透過瀏覽器(Browser)進入某個購物網站,恰好在網站首頁就看到自己可能想購買的商品,於是使用者點擊這個商品的連結按鈕,向購物網站發送請求(Request),這個請求就是「我點擊了這個商品的連結,請給我這個商品的介紹頁面」,而後購物網站的伺服器(Server)會根據使用者請求,找到這個頁面回傳(Response)給使用者。
第二個問題是:「HTTP在瀏覽器發送請求、從伺服器取得回應的訊息(或資訊)傳輸過程扮演什麼角色?」
HTTP全名是超文字傳輸協定,所謂超文字一般是指可在電腦或電子裝置上被瀏覽的文字,例如網頁。協定就有點像是為了方便溝通的約定或規範,譬如人與人之間想要快速且向對方傳達最正確的訊息,最有效的方式就是兩個人都使用同一種語言來溝通,而不是在沒透過翻譯軟體、比手畫腳的方式下,你講英文、我講中文;如果另一個人也想來聊天,結果他卻用日文,想當然這個聊天內容會顯得有些混亂。
或者說今天手機只剩30%電力又剛好不小心忘記帶自己的 type C 充電線,結果朋友們都用水果手機、只有lightning 傳輸線,這種情況下就會覺得手機充電孔的 規格沒統一 好像有那麼一點不便?
因此在任何人都可以使用網路、在網路上傳播訊息的狀況下,勢必需要一些準則來確保大家都是在同一種規範底下傳播訊息,而HTTP就是制定網路上傳輸內容的共同規範。
Session
首先要嚴正聲明一下,這篇的session並非"cookie-based session"或"session id",因為網路上會看到很多文章把 session 當作前述兩者,但其實在電腦科學中,session是「一個活動時間」的抽象概念。
進入正文前先推薦矯正我對於session認知的文章 ─ What Does Session Mean In Computer Science?。
然後在彙整Computer Hope、Techopedia和Computer Science Wiki的解釋之後,重新詮釋一下session的定義:
In computer science, in particular networking, a session is a semi-permanent interactive information interchange, also known as a dialogue, a conversation or a meeting, between two or more communicating devices, or between a computer and user (see Login session).
廣義來說,session 其實是在表達「持續某項活動的一段期間(period)」,有的文章會把一段期間稱作一個"時間斷面(time frame)",譬如Alice和Bob單挑一小時的羽球,這一小時可以說建立了一場Alice和Bob的羽球比賽Session,而且這個session始於Alice和Bob開始比賽的那一刻、並止於分出勝負的那一刻。
在電腦科學領域裡面,session比較常用來被稱作是兩個端點(endpoint)的一場「會談」(conversation or meetings),這兩個端點可以是兩台電腦、一台電腦和一台行動裝置、又或者在HTTP session更常看到的是用戶端與伺服器端(client-server)。
Session的好處在於能讓這段期間(或說這場會談)維持一種狀態(stateful),並可以透過某些手段或機制暫時性地讓兩個端點記錄/儲存這段期間內跟這項活動有關的某些訊息,然後在session結束的那一刻銷毀,有些常見儲存session中訊息的方式如session cookie、session variable等。
因為中文其實很難說明Session的精髓,這篇medium的英文文章是我覺得把session解釋得最清楚的一篇好文,而且作者也把很多專有名詞都用相當淺顯易懂的話介紹了一遍(省去不少要再查名詞的麻煩哈)
接下來就要正式來看web的其中一種訊息儲存機制 ─ cookie。
References
- HTTP @MDN
- An overview of HTTP @MDN
- What Does Session Mean In Computer Science? @The Sass Way
- Sessions @Computer Science Wiki
- Session @Computer Hope
- What are sessions? How do they work? @Stackoverflow
- Difference between Session and Cookies @GeeksforGeeks
- A typical HTTP session @MDN
- Difference between cookies, session and tokens @Youtube