1、爲何會有cookiejavascript
首先要明白Cookie是如何產生的,是服務器端生成可以標識用戶的一串數據或文本,保存在客戶端,再次訪問時便會攜帶Cookie信息,方便進行用戶認證或標識。java
從服務器端,發送cookie給客戶端,是對應的Set-Cookie。包括了對應的cookie的名稱,值,以及各個屬性。從客戶端發送cookie給服務器的時候,是不發送cookie的各個屬性的,而只是發送對應的名稱和值。nginx
除了服務器能夠設置cookie值以外,還能夠經過瀏覽器內置的一些腳本,好比javascript,去設置對應的cookie,對應實現是操做js中的document.cookie。web
2、cookie的分類瀏覽器
分爲兩種:會話cookie和持久cookie。會話cookie是僅在本次瀏覽器打開時有效,關閉瀏覽器,cookie便失效。持久cookie是有有效期的,過時了纔會失效。服務器
區分這兩種cookie的方法,若是設置了Discard參數或者沒有設置Expires或者Max-Age來講明過時時間的,就是一個會話cookie。微信
3、cookie的屬性cookie
一、cookie的域屬性session
該屬性主要是爲了告訴瀏覽器將cookie發給哪一個站點的,若是不設置這個屬性,那麼cookie不屬於任一站點,瀏覽器能夠將該cookie發給全部站點,每一個站點都能獲取到用戶信息,這是有違設計初衷,而且會泄露用戶信息的。網站
可是,實際使用的時候,依然有web服務器的cookie機制的設計不夠完善,好比若是a網站沒有設計到該屬性,就會出現如下現象,我訪問完a網站保存了用戶名和密碼,或者發表了一篇博客時填寫了標題titleXXX,在訪問b網站時自動填充了個人用戶名和密碼,或者在提交文本時自動出現提示下拉框,內容是titleXXX。
二、cookie的路徑屬性
能夠容許用戶將cookie與一個站點的部分web站點關聯起來,好比,若是設置了該屬性,name只有在cookie中設定的路徑下,纔可以訪問到該cookie,有效的進行了控制。
三、過時以前若是修改了密碼,cookie會有什麼變化?(引用V2EE論壇上別人的觀點)
cookie裏面放的是signature 也就是簽名,可是這個簽名是屬於token機制的,它與時間戳等其餘相關,修改完密碼以後原來signiture就會失效,換成了新的token和新的signature。
用戶的信息確實要驗證,可是如今的驗證部分要經過比對,可是大部分的請求採用很快的的方法了,經過memcache類型的數據,在nginx端就直接將要驗證的信息做爲索引去取cache中的內容,可是若是用戶關鍵信息變了的話,若是仍是這樣的請求,會將response狀態轉爲從新登陸,而後memcache中的該用戶信息就會換爲新的,你去試試微信,大象筆記,利用heartbeat保持session,若是用戶的簽名發生改變,就會讓全部的heartbeat的客戶端所有從新登陸,cookie失效。
------------待更新--------------