Session與Cookie差別

Session與Cookie差別

這篇介紹在瀏覽器的世界中,常用的Session和cookie。
HTTP本身是個無狀態(Stateless)的協定,可以在Client與Server兩端進行溝通,但是無法紀錄網路上的行為。
Cookie和Session因此誕生,用來解決無紀錄狀態的問題。

由Server送給使用者瀏覽器的一小塊資料(文檔)。
瀏覽器會儲存它並且在瀏覽器下一次發送要求的時候將它送回原本送來的伺服器。
基本上,它是用來區分兩個要求是來自同一個瀏覽器 — 以此去保持使用者的登入狀態。
例如,它提供了保存狀態資訊的功能,來幫助HTTP這個無法紀錄狀態的通訊協定。

Cookie 由瀏覽器處理,具有兩個特性:
特定網域:只針對原本的 網域(domain) 起作用。舉例: 在 *.gaagle.com 存入的 Cookie,不會出現在 *.not-gaagle.com
有生命期限: 到了所設定的生命期限之後會失效。向這個domain的server發送請求時,也會被一併帶進去該請求中。

缺點:Cookie中的所有數據在Client端就可以被修改,數據非常容易被偽造,那麼一些重要的數據就不能存放在Cookie。

Session:

Session負責紀錄在server端上的使用者訊息,會在一個用戶完成身分認證後,存下所需的用戶資料,
接著產生一組對應的 ID,存入 Cookie 後傳回用戶端。 Session泛指有始有終的系列動作/消息。

Client端的Request建一個Session的時候,Server會先檢查這個Client端的Request裡是否有包含了Session標識(Session id),
如果已包含一個Session id,表示這個發起Request的Client端是已經存放過的id,Server就按照Session id,把這個Session找出來使用。
但如果Client端請求不包含Session id,,則表示他是新臉孔,那Server端就為此Client端創建一個Session,並生成一個Session id,並Response給Client端保存。

結論:

Session:帳號登錄驗證過後,Server端所發的識別證
Cookie:是瀏覽器存放資料的地方,可以存放seesion之類的資料