前提:HTTP是一個無狀態(tài)協(xié)議,每一次的請求都是獨立的哆窿。意思就是登錄了購物網(wǎng)站链烈,把商品加入購物車準(zhǔn)備結(jié)算時,網(wǎng)站不認(rèn)識你了挚躯,需要重新登錄强衡。
如果每次請求都能自動攜帶一個暗號,網(wǎng)站服務(wù)器對一下暗號码荔,進(jìn)行放行或攔截漩勤。這就是session id。
cookie是保存session的一種方式目胡。cookie由服務(wù)器生成锯七,存儲在客戶端瀏覽器中。
服務(wù)器也需要保存每個人的session id誉己,對于大型網(wǎng)站眉尸,具有負(fù)載均衡,請求可能被轉(zhuǎn)向服務(wù)器A或服務(wù)器B巨双、C…噪猾,每臺服務(wù)器都需要存儲session id,服務(wù)器不堪重負(fù)筑累。(使用IPhash袱蜡,對固定ip的訪問轉(zhuǎn)發(fā)到固定服務(wù)器或可解決)
token由uid+time+sign[+固定參數(shù)]組成。包含了用戶的user id慢宗,服務(wù)器使用公開算法+自己的密鑰對user id等數(shù)據(jù)做個簽名坪蚁,服務(wù)器也不用保存token,每次請求時計算一遍簽名是否一致镜沽,用CPU計算能力換取存儲空間敏晤。
不準(zhǔn)確的比喻,session是門禁卡缅茉,token是把門禁卡錄入手機(jī)實現(xiàn)手機(jī)開門嘴脾,cookie是口袋,能裝門禁卡和手機(jī)蔬墩。