cookie是前端經(jīng)常涉及到的一個(gè)工具,本身是小甜餅的意思,很可愛(ài)的叫法,下面是瀏覽到的一些關(guān)于cookie的特性和用法,分享一下:
1、js中的cookie是document的一個(gè)屬性,字符串形式的,內(nèi)容以鍵值對(duì)的形式存在:
document.cookie = "key=value; key=value; key=value"
或者使用更友好的cookieStore接口:
CookieStore.set()
CookieStore.get()
CookieStore.getAll()
CookieStore.delete()
CookieStore.onChange()
(只是僅用于https,且有一部分的瀏覽器不支持,兼容性需要考慮)
2、cookie是一個(gè)存儲(chǔ)機(jī)制,可以在內(nèi)存中或者是本地(加上過(guò)期時(shí)間 就會(huì)生成一個(gè)文件存儲(chǔ)在本機(jī)),存儲(chǔ)的內(nèi)容可以是SESSIONID,token等等的。
3、cookie的出現(xiàn)是為了彌補(bǔ)http請(qǐng)求無(wú)狀態(tài)的缺陷,session的概念出現(xiàn)之前使用cookie跟蹤會(huì)話(huà)。
4、和cookie有關(guān)的header有:請(qǐng)求頭 cookie,響應(yīng)頭 set-cookie, set-cookie可以添加、修改、刪除cookie,舉例說(shuō)明:
set-cookie: <name>=<value>[; expires=<date>][; domain=<domain_name>][; path=<some_path>][; secure][; httponly]
set-cookie: KLBRSID=0a401b23e8a71b70de2f4b37f5b4e379|1620719465|1620719456; Path=/
cookie: _zap=045f9128-159a-4802-8ca1-a2fe797fdeaf; d_c0="AADe0Knh_xKPTsoWnOPF_p0Tgwe35HgK5rk=|1619189561"; SESSIONID=yjD4PQ49DxIUoi1C71fbjJfo7EsV1rIIIKHqq4pCDw0;
5、查看網(wǎng)站的cookie,在地址欄使用語(yǔ)句:
javascript:alert(dociment.cookie)
6、cookie功能需要瀏覽器支持,瀏覽器的設(shè)置中可以禁用cookie。
7、cookie是不可跨域的,具體表現(xiàn)在:瀏覽器訪問(wèn)A網(wǎng)站就攜帶A網(wǎng)站的cookie(根據(jù)域名區(qū)分不同網(wǎng)站的cookie),A網(wǎng)站不能操作B網(wǎng)站的cookie。
8、大多數(shù)瀏覽器每一個(gè)域可以對(duì)應(yīng)50個(gè)左右的cookie,存儲(chǔ)的內(nèi)容4kb左右,超過(guò)這個(gè)值,瀏覽器會(huì)自動(dòng)刪除。
9、同域內(nèi)瀏覽器發(fā)出的任何一個(gè)請(qǐng)求都攜帶cookie,但是資源類(lèi)型的請(qǐng)求攜帶的cookie對(duì)服務(wù)端一般沒(méi)有意義,所以可以另外存儲(chǔ)在一個(gè)域名下。
10、secure cookie:僅在https而不是http的請(qǐng)求中被攜帶,具有secure標(biāo)志。
11、httpOnly的cookie:只能通過(guò)http的方式訪問(wèn),其它方式比如跨域的腳本就不能讀取或者操作cookie。
12、不允許cookie跨域-samesite:
從a.com網(wǎng)站向b.com發(fā)起的請(qǐng)求不允許攜帶cookie
Set-Cookie: CookieName = CookieValue; SameSite = Lax;
Set-Cookie: CookieName = CookieValue; SameSite = Strict;
13、本地cookie和內(nèi)存cookie區(qū)別在于本地cookie被加上了過(guò)期時(shí)間,以文本的形式存儲(chǔ),過(guò)期了就被刪除。
部分內(nèi)容參考自:https://link.zhihu.com/?target=http%3A//www.imooc.com/article/286531