什么是cookie?
簡(jiǎn)單地說(shuō)福压,cookie 就是瀏覽器儲(chǔ)存在用戶電腦上的一小段文本文件。cookie 是純文本格式或舞,不包含任何可執(zhí)行的代碼荆姆。一個(gè) Web 頁(yè)面或服務(wù)器告知瀏覽器按照一定規(guī)范來(lái)儲(chǔ)存這些信息,并在隨后的請(qǐng)求中將這些信息發(fā)送至服務(wù)器映凳,Web 服務(wù)器就可以使用這些信息來(lái)識(shí)別不同的用戶胆筒。大多數(shù)需要登錄的網(wǎng)站在用戶驗(yàn)證成功之后都會(huì)設(shè)置一個(gè) cookie,只要這個(gè) cookie 存在并可以魏宽,用戶就可以自由瀏覽這個(gè)網(wǎng)站的任意頁(yè)面腐泻。再次說(shuō)明决乎,cookie 只包含數(shù)據(jù)队询,就其本身而言并不有害派桩。
cookie的使用場(chǎng)景
用戶在請(qǐng)求網(wǎng)站的時(shí)候服務(wù)器會(huì)返回cookie信息到瀏覽器,瀏覽器得到cookie 信息以后會(huì)保存起來(lái)蚌斩;以后訪問(wèn)我們的站點(diǎn)都是把我們保存好的cookie信息通過(guò)頭信息的方式發(fā)送給服務(wù)端铆惑,那么服務(wù)端得到cookie信息以后就可以驗(yàn)證我們是否是登錄狀態(tài)。
cookie的特性
1送膳,不同的瀏覽器存放的cookie位置不一樣员魏,也是不能通用的;也就是說(shuō)你在firefox下設(shè)置的cookie叠聋,在chrome下是無(wú)法訪問(wèn)到的撕阎;
2,cookie的存儲(chǔ)是以域名的形式進(jìn)行區(qū)分的碌补;
3虏束,一個(gè)域名下存放的cookie的個(gè)數(shù)是有限制的,不同的瀏覽器存放的個(gè)數(shù)不一樣厦章;
4镇匀,每個(gè)cookie存放的內(nèi)容大小也是有限制的,不同瀏覽器存放大小不一樣袜啃;
5汗侵,由于在HTTP請(qǐng)求中的cookie是明文傳遞的,所以安全性成問(wèn)題群发。(除非用HTTPS)晰韵;
6,Cookie的大小限制在4KB左右熟妓。對(duì)于復(fù)雜的存儲(chǔ)需求來(lái)說(shuō)是不夠用的宫屠;
7,cookie會(huì)被附加在每個(gè)HTTP請(qǐng)求中滑蚯,所以無(wú)形中增加了流量浪蹂;
Cookie的使用
1,設(shè)置Cookie:
document.cookie = '1701H=41'; //默認(rèn)關(guān)閉瀏覽器進(jìn)程Cookie消失
2告材,獲取Cookie:
document.cookie坤次;
3,設(shè)置Cookie過(guò)期時(shí)間斥赋,時(shí)間必須是字符串格式(兼容IE):
var oDate = new Date();
oDate.setDate(oDate.getDate() + 5);
document.cookie = '1701H = 41人;expires = ' + oDate.toGMTString();
4缰猴,內(nèi)容最好以encodeURI編碼存放:
document.cookie = '1701H = ' + encodeURI('41人');
5,解碼Cookie:
decodeURI(document.cookie)
Cookie常用封裝方法
1疤剑,設(shè)置Cookie:
其實(shí)自我感覺(jué)設(shè)置Cookie就是創(chuàng)建一個(gè)對(duì)象滑绒,將需要放進(jìn)Cookie的內(nèi)容轉(zhuǎn)為Cookie對(duì)象闷堡,代碼如下
function setCookie(key, val, t) {
var oDate = new Date();
oDate.setDate(oDate.getDate() + t);
document.cookie = key + '=' + val + ';expires=' + oDate.toGMTString();
}
2,獲取Cookie:
獲取其實(shí)很簡(jiǎn)單疑故,我們獲取Cookie的時(shí)候獲取的是一段包含所有Cookie的字符串杠览,但是只是字符串的話還是沒(méi)有辦法取值的
方法很簡(jiǎn)單只要我們將他們轉(zhuǎn)為數(shù)組就行了
function getCookie(key) {
var arr1 = document.cookie.split('; ');
for(var i=0; i<arr1.length;i++){
var arr2 = arr1[i].split('=');
for(var j=0;j<arr2.length;j++)
if(arr2[0] == key) {
return decodeURI(arr2[1]);
}}}}
3,刪除Cookie:
在我看來(lái)其實(shí)所謂的刪除不過(guò)是利用Cookie中有過(guò)期時(shí)間這一特性纵势,將時(shí)間轉(zhuǎn)為負(fù)數(shù)也將就是說(shuō)設(shè)定的時(shí)間要比現(xiàn)在時(shí)間早踱阿,代碼如下
function removeCookie(key) {
setCookie(key, '', -1);
}