他們要解決甚麼問題?
跟其他筆記一樣, 想要先簡單快速建立問題意識和技術背後的運作概念!
臉盲症的 Server
我們可以將 server 想像成一個很不會認人的煙攤店員。明明才剛跟他買一包菸,過了一分鐘後再過去,他就完全忘了你,不但失禮,客人還要重講一次菸的牌子,非常面倒くさい。
將鏡頭拉回 server
server 也是一樣的,因為他沒辦法辨認現在發送這個 request 的人是否跟一秒鐘前所發出的人是不是同一個,所以對 server 來說 client 所發送的每一個 reuqest 都是一個陌生、全新的 request 彼此之間都是沒有關係的,換句話說,server 沒辦法記下、辨認每一個 client 的狀態。
這樣講可能有點抽象,來看個實例吧!
假如今天我在購物網站的 A 頁面登入,並且把貓沙加進購物車,忽然間看到電子錶的特價中,點了進去,跑到了 B 頁面,因為 server 沒辦法記住、辨認出我已經登入的狀態,所以這個 request 對 server 來說就是一個全新、獨立的 request,因此在新的 B 頁面裡,不但購物車是空的,我還得重新登入一次才行,非常的麻煩。
記不住?就找個方法記錄下來啊!-Session
既然 server 記不住,那就乾脆把這些狀態記錄在某個地方放在 client 那邊,並且規定以後要發送 request 給 server 的話,要把這些資訊一併帶上來。這麼一來的話,server 就可以不就可以辨認出這些 request 的狀態了嗎?
這種讓 request 變成 stateful 的機制就叫做 session。在實作上有許多的方式都可以達到這個目標,而其中一個方法就是 Cookie。
其中一個好方法-Cookie
簡言之 Cookie 的運作模式大概是這樣,server 會將 client 的識別資訊放在 browser 裡,每次 client 端發送 request 的時候,browser 都會把這些資訊一併帶給 server。
這麼一來,這些 request 就不再是沒有記錄任何狀態的 request 了,因為在這些 request 裡都帶著這些識別資料,server 就可以根據這些識別資料在資料庫查找是否有相對應的資料並回傳相對應的 reaponse。
就像是帶著 101 識別證的人可以自由進出 101,而不需要每次都先在櫃台填寫資料做確認。
總結
在最後總結一下 Session 和 Cookie 的關係:
Session 是指讓 request 變成 stateful 的一種機制,因為 server 是臉盲,所以要找一個辦法讓他知道每個 request 的狀態嗎!要做出 Session 機制的方法有很多種,目前最被廣泛使用的就是 Cookie 這個方法。
所以 Cookie 就是實作 Session 機制的其中一個方法,完結。