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