背景
在HTTP協(xié)議的定義中,采用了一種機(jī)制來記錄客戶端和服務(wù)器端交互的信息,這種機(jī)制被稱為cookie皆疹,cookie規(guī)范定義了服務(wù)器和客戶端交互信息的格式闽铐、生存期蝶怔、使用范圍、安全性兄墅。
在JavaScript中可以通過 document.cookie 來讀取或設(shè)置這些信息踢星。由于 cookie 多用在客戶端和服務(wù)端之間進(jìn)行通信,所以除了JavaScript以外隙咸,服務(wù)端的語言(如PHP)也可以存取 cookie沐悦。
Cookie 是什么
Cookie 是瀏覽器訪問服務(wù)器后,服務(wù)器傳給瀏覽器的一段數(shù)據(jù)五督。
瀏覽器需要保存這段數(shù)據(jù)藏否,不得輕易刪除。
此后每次瀏覽器訪問該服務(wù)器充包,都必須帶上這段數(shù)據(jù)副签。
Cookie 就是這么簡單,這就是 Web 開發(fā)里 Cookie 的含義基矮。
如何使用 Cookie
Cookie 一般有兩個(gè)作用淆储。
第一個(gè)作用是識(shí)別用戶身份。
比如用戶 A 用瀏覽器訪問了 http://a.com家浇,那么 http://a.com 的服務(wù)器就會(huì)立刻給 A 返回一段數(shù)據(jù)「uid=1」(這就是 Cookie)遏考。當(dāng) A 再次訪問 http://a.com 的其他頁面時(shí),就會(huì)附帶上「uid=1」這段數(shù)據(jù)蓝谨。
同理灌具,用戶 B 用瀏覽器訪問 http://a.com 時(shí)青团,http://a.com 發(fā)現(xiàn) B 沒有附帶 uid 數(shù)據(jù),就給 B 分配了一個(gè)新的 uid咖楣,為2督笆,然后返回給 B 一段數(shù)據(jù)「uid=2」。B 之后訪問 http://a.com 的時(shí)候诱贿,就會(huì)一直帶上「uid=2」這段數(shù)據(jù)娃肿。
借此,http://a.com 的服務(wù)器就能區(qū)分 A 和 B 兩個(gè)用戶了珠十。
第二個(gè)作用是記錄歷史料扰。
假設(shè) http://a.com 是一個(gè)購物網(wǎng)站,當(dāng) A 在上面將商品 A1 焙蹭、A2 加入購物車時(shí)晒杈,JS 可以改寫 Cookie,改為「uid=1; cart=A1,A2」孔厉,表示購物車?yán)镉?A1 和 A2 兩樣商品了拯钻。
這樣一來,當(dāng)用戶關(guān)閉網(wǎng)頁撰豺,過三天再打開網(wǎng)頁的時(shí)候粪般,依然可以看到 A1、A2 躺在購物車?yán)镂坭耄驗(yàn)闉g覽器并不會(huì)無緣無故地刪除這個(gè) Cookie亩歹。
借此,就達(dá)到里記錄用戶操作歷史的目的了凡橱。
(上面的例子只是為了讓大家了解 Cookie 的作用而構(gòu)想出來的捆憎,實(shí)際的網(wǎng)站使用 Cookie 時(shí)會(huì)更謹(jǐn)慎一些。)
參考鏈接:https://zhuanlan.zhihu.com/p/22396872?refer=study-fe
Cookie 的特點(diǎn)
1梭纹、服務(wù)器通過 Set-Cookie 響應(yīng)頭設(shè)置 Cookie
2躲惰、瀏覽器得到 Cookie 之后,每次請求都要帶上 Cookie
3变抽、服務(wù)器讀取 Cookie 就知道登錄用戶的信息(email)
問題
1础拨、問:我在 Chrome 登錄了得到 Cookie,用 Safari 訪問绍载,Safari 會(huì)帶上 Cookie 嗎
答:no
2诡宗、問:Cookie 存在哪
答:Windows 存在 C 盤的一個(gè)文件里
3、問:Cookie會(huì)被用戶篡改嗎击儡?
答:可以塔沃。 Session 可防止用戶篡改
4、問:Cookie 有效期嗎阳谍?
答:默認(rèn)有效期20分鐘左右蛀柴,不同瀏覽器策略不同
后端可以強(qiáng)制設(shè)置有效期螃概,具體語法看 MDN
5、問:Cookie 遵守同源策略嗎鸽疾?
答:也有吊洼,不過跟 AJAX 的同源策略稍微有些不同。
當(dāng)請求 qq.com 下的資源時(shí)制肮,瀏覽器會(huì)默認(rèn)帶上 qq.com 對應(yīng)的 Cookie冒窍,不會(huì)帶上 baidu.com 對應(yīng)的 Cookie
當(dāng)請求 v.qq.com 下的資源時(shí),瀏覽器不僅會(huì)帶上 v.qq.com 的Cookie豺鼻,還會(huì)帶上 qq.com 的 Cookie
另外 Cookie 還可以根據(jù)路徑做限制综液,請自行了解,這個(gè)功能用得比較少儒飒。