cookie指某些網站爲了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數據(一般通過加密)。後端
1.服務器經過 Set-Cookie 響應頭設置 Cookie跨域
2.瀏覽器獲得 Cookie 以後,每次請求都要帶上 Cookie瀏覽器
3.服務器讀取 Cookie 就知道登陸用戶的信息(email)緩存
4.cookie遵照同源策略,不過和AJAX略有區別:cookie只能在同一個域名中攜帶,訪問baidu.com,baidu.com會帶上baidu.com 的cookie,不會攜帶google.com的cookie,區別是cookie的可見性是向下的,好比說訪問imgge.baidu.com,不只會帶上imgge.baidu.com的cookie,還會帶上baidu.com的cookie.安全
5.cookie存在本地客戶端硬盤中bash
Cookie主要用於如下三個方面:服務器
會話狀態管理(如用戶登陸狀態、購物車、遊戲分數或其它須要記錄的信息)
個性化設置(如用戶自定義設置、主題等)
瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等)
複製代碼
由於HTTP協議是無狀態的,即服務器不知道用戶上一次作了什麼,這嚴重阻礙了交互式Web應用程序的實現。在典型的網上購物場景中,用戶瀏覽了幾個頁面,買了一盒餅乾和兩瓶飲料。最後結賬時,因爲HTTP的無狀態性,不經過額外的手段,服務器並不知道用戶到底買了什麼,因此Cookie就是用來繞開HTTP的無狀態性的「額外手段」之一。服務器能夠設置或讀取Cookies中包含信息,藉此維護用戶跟服務器會話中的狀態。cookie
在剛纔的購物場景中,當用戶選購了第一項商品,服務器在向用戶發送網頁的同時,還發送了一段Cookie,記錄着那項商品的信息。當用戶訪問另外一個頁面,瀏覽器會把Cookie發送給服務器,因而服務器知道他以前選購了什麼。用戶繼續選購飲料,服務器就在原來那段Cookie裏追加新的商品信息。結賬時,服務器讀取發送來的Cookie就好了。ide
Cookie另外一個典型的應用是當登陸一個網站時,網站每每會請求用戶輸入用戶名和密碼,而且用戶能夠勾選「下次自動登陸」。若是勾選了,那麼下次訪問同一網站時,用戶會發現沒輸入用戶名和密碼就已經登陸了。這正是由於前一次登陸時,服務器發送了包含登陸憑據(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上。第二次登陸時,若是該Cookie還沒有到期,瀏覽器會發送該Cookie,服務器驗證憑據,因而沒必要輸入用戶名和密碼就讓用戶登陸了。/* 來源於維基百科*/性能
cookie的擁有 Name,``Value,
Domain, Path, Expires/Max-Age, Size, Http, Secure, Samesite
顧名思義就是cookie的名字,不過name的名字不能相同,相同的name後面的會覆蓋前面的。
就是cookie的值,該值是會被URL編碼的
就是cookie指向的域名,如前說述,網站每一個網頁的cookie都必須指向同一個域名。
默認值path"/",路徑也是路由,也就是它會根據後面的內容進行匹配綁定cookie,在同一個服務器上有目錄以下:/image/,/image/11/,/image/22/,現設一個cookie1的path
爲/image/
,cookie2的path爲/image/11/
,那麼/image/
下的全部頁面均可以訪問到cookie1,而/image/
和/image/22/
的子頁面不能訪問cookie2。這是由於cookie能讓其path路徑下的頁面訪問。,
//爲默認值時
www.baidu.com
wwww.baidu.com/image
//他會給image的子路徑綁定cookie,如/image, /image/11/,/image/22/等等
複製代碼
到期時間,cookie有效期默認爲20分鐘,不一樣瀏覽器策略不一樣,若是關閉瀏覽器後,這個cookie就會被刪除,固然也能夠在後端設置cookie的有效期,具體能夠在MDN查看語法, Expires
響應頭包含日期/時間, 即在此時候以後,響應過時。Expires
指定一個絕對的過時時間(GMT格式),這麼作會致使至少2個問題1)客戶端和服務器時間不一樣步致使Expires的配置出現問題 2)很容易在配置後忘記具體的過時時間,致使過時來臨出現浪涌現象(即突發性的出現網頁性能降低,影響體驗),因此如今已經不用了,開始用cache-contorl
來作爲到期時間和Max-Age
搭配使用,具體能夠在MDN上面瞭解。
Max-Age
做爲代替Expires的屬性,指令指定從請求的時間開始,容許提取的響應被重用的最長時間(單位:秒)。 例如,「max-age=60」表示可在接下來的 60 秒緩存和重用響應。
這個屬性譯爲安全,http不只是無狀態的,仍是不安全的協議,容易被劫持,打個比方,你在手機端瀏覽網頁的時候,有沒有中國移動圖標跳出來過,閒言少敘,當這個屬性設置爲true時,此cookie只會在https和ssl等安全協議下傳輸
SameSite-cookies
是一種機制,用於定義cookie如何跨域發送。這是谷歌開發的一種安全機制,而且如今在最新版本(Chrome Dev 51.0.2704.4)中已經開始實行了。SameSite-cookies的目的是嘗試阻止CSRF(Cross-site request forgery跨站請求僞造)以及XSSI(Cross Site Script Inclusion (XSSI) 跨站腳本包含)攻擊。如今已經運用在了谷歌控制檯。
SameSite 這個屬性有兩個可選值,分別是Strict
和Lax
。其中Strict爲嚴格模式,另外一個域發起的任何請求都不會攜帶該類型的 cookie,可以完美的阻止 CSRF 攻擊,可是也可能帶來了少量不便之處,例如經過一個導航網站的超連接打開另外一個域的網頁會由於沒有攜帶 cookie 而致使沒有登陸等問題。但目前SameSite Cookie還處於實驗階段,並非全部瀏覽器都支持。 Same-Site Cookies
很是容易部署,只須要將你原來的設置 cookie 的地方
Set-Cookie: key=value; path=/
改成
Set-Cookie: key=value; path=/; SameSite
就能夠啦
備註:跨站請求僞造(又被稱爲 CSRF或者XSRF),它源自一個域網站向另外一個域網站發起請求的簡單功能。攻擊者經過一些技術手段欺騙用戶使用瀏覽器去訪問一個本身曾經認證過的網站並執行一些敏感操做(如轉帳)。
暫時就寫這麼多,若有疏漏,歡迎補充。