Cookie老是保存在客戶端中,按在客戶端中的存儲位置,可分爲內存Cookie和硬盤Cookie。
1,內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉後就消失了,其存在時間是短暫的。
2,硬盤Cookie保存在硬盤裏,有一個過時時間,除非用戶手工清理或到了過時時間,硬盤Cookie不會被刪除,其存在時間是長期的。因此,按存在時間,可分爲非持久Cookie和持久Cookie。
使用場景:(由於HTTP協議是無狀態的,即服務器不知道用戶上一次作了什麼,這嚴重阻礙了交互式Web應用程序的實現。)
1,在典型的網上購物場景中,用戶瀏覽了幾個頁面,買了一盒餅乾和兩瓶飲料。最後結賬時,因爲HTTP的無狀態性,不經過額外的手段,服務器並不知道用戶到底買了什麼。 因此Cookie就是用來繞開HTTP的無狀態性的「額外手段」之一。服務器能夠設置或讀取Cookies中包含信息,藉此維護用戶跟服務器會話中的狀態。 在剛纔的購物場景中,當用戶選購了第一項商品,服務器在向用戶發送網頁的同時,還發送了一段Cookie,記錄着那項商品的信息。當用戶訪問另外一個頁面,瀏覽器會把Cookie發送給服務器,因而服務器知道他以前選購了什麼。用戶繼續選購飲料,服務器就在原來那段Cookie裏追加新的商品信息。結賬時,服務器讀取發送來的Cookie就好了。
2,Cookie另外一個典型的應用是當登陸一個網站時,網站每每會請求用戶輸入用戶名和密碼,而且用戶能夠勾選「下次自動登陸」。若是勾選了,那麼下次訪問同一網站時,用戶會發現沒輸入用戶名和密碼就已經登陸了。這正是由於前一次登陸時,服務器發送了包含登陸憑據(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上。第二次登陸時,(若是該Cookie還沒有到期)瀏覽器會發送該Cookie,服務器驗證憑據,因而沒必要輸入用戶名和密碼就讓用戶登陸了。
1)在cookie中,保存三個東西 — 用戶名,登陸序列,登陸token。
用戶名:明文存放。
登陸序列:一個被MD5散列過的隨機數,僅當強制用戶輸入口令時更新(如:用戶修改了口令)。
登陸token:一個被MD5散列過的隨機數,僅一個登陸session內有效,新的登陸session會更新它。
2)上述三個東西會存在服務器上,服務器的驗證用戶須要驗證客戶端cookie裏的這三個事。
3)這樣的設計會有什麼樣的效果,會有下面的效果,
a)登陸token是單實例登陸。意思就是一個用戶只能有一個登陸實例。
b)登陸序列是用來作盜用行爲檢測的。若是用戶的cookie被盜後,盜用者使用這個cookie訪問網站時,咱們的系統是覺得是合法用戶,而後更新「登 錄token」,而真正的用戶回來訪問
時,系統發現只有「用戶名」和「登陸序列」相同,可是「登陸token」 不對,這樣的話,系統就知道,這個用戶可能出現了被盜用的狀況,因而,系統能夠清除並更改登陸序列 和 登
錄token,這樣就能夠令全部的cookie失效,並要求用戶輸入口令。並給警告用戶系統安全。
4)固然,上述這樣的設計仍是會有一些問題,好比:同一用戶的不一樣設備登陸,甚至在同一個設備上使用不一樣的瀏覽器保登陸。一個設備會讓另外一個設備的登陸 token和登陸序列失效,
從而讓其它設備和瀏覽器須要從新登陸,並會形成cookie被盜用的假象。因此,你在服務器服還須要考慮- IP 地址,
a) 若是以口令方式登陸,咱們無需更新服務器的「登陸序列」和 「登陸token」(但須要更新cookie)。由於咱們認爲口令只有真正的用戶知道。
b) 若是 IP相同 ,那麼,咱們無需更新服務器的「登陸序列」和 「登陸token」(但須要更新cookie)。由於咱們認爲是同一用戶有同一IP(固然,同一個局域網裏也有同一IP,但咱們
認爲這個局域網是用戶能夠控制的。網吧內並不推薦使用這一功能)。
c) 若是 (IP不一樣 && 沒有用口令登陸),那麼,「登陸token」 就會在多個IP間發生變化(登陸token在兩個或多個ip間被來來回回的變換),當在必定時間內達到必定次數後,系統才
會真正以爲被盜用的可能性很高, 此時系統在後臺清除「登陸序列」和「登陸token「,讓Cookie失效,強制用戶輸入口令(或是要求用戶更改口令),以保證多臺設備上的cookie 一致
瀏覽器