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失效。

------------待更新--------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章