都知道http是無狀態的協議,那麼要記錄狀態的話,就應當有輔助的東西來記錄狀態,cookie & session 的作用就在與此啦~
cookie
what
什麼是cookie?cookie其實是儲存到使用者本地的少量資料,一般用於使用者身份資訊確認。
where
那麼,我們怎麼看到cookie呢?
審查以下掘金的頁面,可以看到掘金儲存的cookie,cookie一般存於使用者記憶體&硬碟裡面。
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除了在審查元素中看之外,也可以通過document.cookie來讀取(除了httponly的cookie)。
接著我們看下伺服器端
伺服器端設定cookie也很簡單,設定的時候,在響應頭中設Set-Cookie欄位即可,讀取的時候,cookie會在請求頭中攜帶過去給服務端。
session
說完了cookie,我們就來說以下session。
使用
session通常是web服務用來儲存狀態的方法,它需要於cookie一起使用。
為什麼session要配合cookie使用呢?原因很簡單,因為沒有cookie,使用者就沒有攜帶資訊過來呀。
所以,第一次訪問頁面的時候,session就會認為該使用者是一個新的使用者,於是為使用者生成一個session-id : session,並且將session-id在響應頭的Set-Cookie中返回,在使用者端儲存來session-id。
之後的所有請求,使用者就都會攜帶session-id到服務端,服務端在請求頭的cookie中拿到session-id,則可以判斷使用者是誰,然後就可以根據使用者的身份進行相應的操作了。
當然,session也有過期時間。例如過期時間為60分鐘:沒有收到使用者資料開始的60分鐘後,session就過期了。
儲存
session的儲存方式有兩種:記憶體 & 資料庫
如果伺服器單機的話,session存記憶體是完全沒有問題的。
如果是分散式的話,那麼session就不能存記憶體的,因為多臺機器的session是不能互通的,所以可能會出現,有的介面有登入,有的介面沒登入的狀態。所以,分散式的話經常使用的資料庫是redis。
寫在最後
cookie與session還是比較常用的,梳理完之後希望可以更加理解。