cookie & session

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

cookie

what

什麼是cookie?cookie實際上是存儲到用戶本地的少許數據,通常用於用戶身份信息確認。redis

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

咱們先看下瀏覽器設置cookie,設置的時候只需對document.cookie對象進行賦值便可,設置完成以後,可在cookie中查看。session

固然了,讀取cookie除了在審查元素中看以外,也能夠經過document.cookie來讀取(除了httponly的cookie)。dom

接着咱們看下服務器端分佈式

服務器端設置cookie也很簡單,設置的時候,在響應頭中設Set-Cookie字段便可,讀取的時候,cookie會在請求頭中攜帶過去給服務端。spa

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仍是比較經常使用的,梳理完以後但願能夠更加理解。

相關文章
相關標籤/搜索