相信熟悉web開發者對cookie必定不陌生,但相信不少人一開始都跟做者同樣,僅僅只是知道這個東西,只知道簡單地使用,那麼今天咱們就從它的源頭談起。python
Cookie(複數形態Cookies),中文名稱爲「小型文本文件」或「小甜餅」,指某些網站爲了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數據(一般通過加密)。定義於RFC2109。是網景公司的前僱員盧·蒙特利在1993年3月的發明[2]。git
嗯,解釋就醬,很簡單,說白了就是一種保存一些信息的文本文件,它以鍵值對的形式保存在瀏覽器中。github
你們都有登陸某網站的經歷,登陸頁面通常都有一個記住密碼/下次自動登錄的選項,勾選之後下次能夠直接訪問而不須要再次登陸。然而,登陸一個網站的過程無非就是服務端獲取到從客戶端發送的帳號密碼等信息與數據庫裏保存的信息進行匹配,若是匹配成功,則說明登陸成功,不然登陸失敗。可是,衆所周知,http是無狀態協議,一旦數據交換完畢,客戶端與服務器端的鏈接就會關閉,再次交換數據須要創建新的鏈接,這就意味着服務器沒法從鏈接上記錄客戶端以前的請求。這樣的話,當用戶登陸了一個網站,等他點擊進入另一個頁面時,又會回到沒有登陸的狀態。http的這種機制嚴重阻礙了交互式Web應用程序的實現,爲了彌補這一缺陷,聰明的猿類發明了cookie。經過請求攜帶的cookie中的信息,服務端能夠識別用戶並作出適當的響應。web
固然,cookie不是隨便給的,尤爲是關於我的信息方面的東西。通常來講,當用戶成功登陸一個網站後,服務端就發送一端包含一些能惟一標識這個用戶的cookie憑證。通常這個cookie的值由用戶的帳號之類的信息經某種加密算法計算出來,具體實現因網站而異,在python-flask中,cookie由response對象的set_cookie(key,value)方法建立cookie,能夠添加過時時間參數。當服務端給瀏覽器設下cookie後,瀏覽器之後發送的全部請求都將會攜帶上cookie,直到這個cookie過時,這樣服務端就能夠經過cookie去判讀發送這個請求的用戶是否登陸以實現不一樣的功能了。算法
因而可知,cookie的安全級別很是高,若是有人竊取了用戶在某個網站上的cookie,那麼他能夠憑這個cookie去冒充原來的用戶訪問網站以達到某種目的。固然,在正常上網的狀況下,cookie不容易被竊取。chrome
訪問github首頁(已登陸),打開chrome的開發者工具,選擇network,找到github.com記錄,點擊查看cookie,能夠看到以下記錄:
request cookies是瀏覽器發送請求時發送的cookie
response cookies 是服務器給瀏覽器發送的cookie數據庫cookie的各個屬性:
Name:cookie的名字(鍵)。flask
Value:cookie的值。跨域
Domain: cookie的域名,cookie是不可跨域名的。域名www.google.com頒發的Cookie不會被提交到域名www.zhihu.com去。這是由cookie的隱私安全機制決定的。隱私安全機制可以禁止網站非法獲取其餘網站的cookie。瀏覽器
Path: cookie的路徑,domain屬性決定運行訪問Cookie的域名,而path屬性決定容許訪問cookie的路徑,通常狀況下,cookie的path是"/",也就是該域名下的全部路徑都可使用,若是設定了特定的path,那麼這個cookie只能在相應的路徑下使用。
Expires:cookie的過時時間,cookie在過時時間以內是持續有效的。也有永久cookie,除非手動清除,不然不會自動消失。
Secure: cookie的安全屬性,HTTP協議不只是無狀態的,並且是不安全的。使用HTTP協議的數據不通過任何加密就直接在網絡上傳播,有被截獲的可能。使用HTTP協議傳輸很機密的內容是一種隱患。若是不但願Cookie在HTTP等非安全協議中傳輸,能夠設置Cookie的secure屬性爲true。瀏覽器只會在HTTPS和SSL等安全協議中傳輸此類Cookie。
Cookie老是保存在客戶端中,按在客戶端中的存儲位置,可分爲內存Cookie和硬盤Cookie。
內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉後就消失了,其存在時間是短暫的。硬盤Cookie保存在硬盤裏,有一個過時時間,除非手動清理或到了過時時間,硬盤Cookie不會被刪除,其存在時間是長期的。因此,按存在時間,可分爲非持久Cookie和持久Cookie。
雖然cookie給開發者和用戶帶來了許多便利,但它不可避免地暴露了許多弊端
1.Cookie會被附加在每一個HTTP請求中,因此無形中增長了流量,給本來已經擁堵不堪的網絡帶來更大的負擔。
2.因爲在HTTP請求中的Cookie是明文傳遞的,被攔截後攔截者能夠直接使用。(除非用HTTPS)
3.Cookie的大小限制在4KB左右。對於複雜的存儲需求來講是不夠用的
轉載請註明出處,文章也一同發表在了個人我的網站上,歡迎你們來訪(http://www.zhibinnet.com)。