cookie & session

寫不好程式碼的格子襯衫發表於2019-01-05

都知道http是無狀態的協議,那麼要記錄狀態的話,就應當有輔助的東西來記錄狀態,cookie & session 的作用就在與此啦~

cookie

what

什麼是cookie?cookie其實是儲存到使用者本地的少量資料,一般用於使用者身份資訊確認。

where

那麼,我們怎麼看到cookie呢?

審查以下掘金的頁面,可以看到掘金儲存的cookie,cookie一般存於使用者記憶體&硬碟裡面。

cookie & session

cookie的屬性

接下來,我們來看以下cookie的具體屬性

name // cookie 名 必須
value // cookie 值 必須
domain // cookie 所屬域名 必須
path // cookie 所屬path 必須
expires // cookie 過期時間 UTC時間格式
max-age // cookie 存活時間 以s為單位,0表示刪除,小於0或沒有表示會話cookie(關閉瀏覽器即失效)
size // cookie 大小
httponly // 只允許http請求攜帶cookie,document.cookie不支援
secure // 只允許https請求攜帶cookie,http不允許
複製程式碼

如何設定&讀取

設定cookie,可以在瀏覽器端設定,也可以在伺服器端設定。

我們先看下瀏覽器設定cookie,設定的時候只需對document.cookie物件進行賦值即可,設定完成之後,可在cookie中檢視。

cookie & session

cookie & session

當然了,讀取cookie除了在審查元素中看之外,也可以通過document.cookie來讀取(除了httponly的cookie)。

cookie & session

接著我們看下伺服器端

伺服器端設定cookie也很簡單,設定的時候,在響應頭中設Set-Cookie欄位即可,讀取的時候,cookie會在請求頭中攜帶過去給服務端。

cookie & session

session

說完了cookie,我們就來說以下session。

使用

session通常是web服務用來儲存狀態的方法,它需要於cookie一起使用。

為什麼session要配合cookie使用呢?原因很簡單,因為沒有cookie,使用者就沒有攜帶資訊過來呀。

所以,第一次訪問頁面的時候,session就會認為該使用者是一個新的使用者,於是為使用者生成一個session-id : session,並且將session-id在響應頭的Set-Cookie中返回,在使用者端儲存來session-id。

之後的所有請求,使用者就都會攜帶session-id到服務端,服務端在請求頭的cookie中拿到session-id,則可以判斷使用者是誰,然後就可以根據使用者的身份進行相應的操作了。

cookie & session

當然,session也有過期時間。例如過期時間為60分鐘:沒有收到使用者資料開始的60分鐘後,session就過期了。

儲存

session的儲存方式有兩種:記憶體 & 資料庫

如果伺服器單機的話,session存記憶體是完全沒有問題的。

如果是分散式的話,那麼session就不能存記憶體的,因為多臺機器的session是不能互通的,所以可能會出現,有的介面有登入,有的介面沒登入的狀態。所以,分散式的話經常使用的資料庫是redis。

寫在最後

cookie與session還是比較常用的,梳理完之後希望可以更加理解。

相關文章