什么是cookie?
簡單地說,cookie 就是瀏覽器儲存在用戶電腦上的一小段文本文件。cookie 是純文本格式,不包含任何可執(zhí)行的代碼。一個 Web 頁面或服務(wù)器告知瀏覽器按照一定規(guī)范來儲存這些信息,并在隨后的請求中將這些信息發(fā)送至服務(wù)器,Web 服務(wù)器就可以使用這些信息來識別不同的用戶。大多數(shù)需要登錄的網(wǎng)站在用戶驗證成功之后都會設(shè)置一個 cookie,只要這個 cookie 存在并可以,用戶就可以自由瀏覽這個網(wǎng)站的任意頁面。再次說明,cookie 只包含數(shù)據(jù),就其本身而言并不有害。
cookie的使用場景
用戶在請求網(wǎng)站的時候服務(wù)器會返回cookie信息到瀏覽器,瀏覽器得到cookie 信息以后會保存起來;以后訪問我們的站點(diǎn)都是把我們保存好的cookie信息通過頭信息的方式發(fā)送給服務(wù)端,那么服務(wù)端得到cookie信息以后就可以驗證我們是否是登錄狀態(tài)。
cookie的特性
1,不同的瀏覽器存放的cookie位置不一樣,也是不能通用的;也就是說你在firefox下設(shè)置的cookie,在chrome下是無法訪問到的;
2,cookie的存儲是以域名的形式進(jìn)行區(qū)分的;
3,一個域名下存放的cookie的個數(shù)是有限制的,不同的瀏覽器存放的個數(shù)不一樣;
4,每個cookie存放的內(nèi)容大小也是有限制的,不同瀏覽器存放大小不一樣;
5,由于在HTTP請求中的cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS);
6,Cookie的大小限制在4KB左右。對于復(fù)雜的存儲需求來說是不夠用的;
7,cookie會被附加在每個HTTP請求中,所以無形中增加了流量;
Cookie的使用
1,設(shè)置Cookie:
document.cookie = '1701H=41'; //默認(rèn)關(guān)閉瀏覽器進(jìn)程Cookie消失
2,獲取Cookie:
document.cookie;
3,設(shè)置Cookie過期時間,時間必須是字符串格式(兼容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è)置Cookie就是創(chuàng)建一個對象,將需要放進(jìn)Cookie的內(nèi)容轉(zhuǎn)為Cookie對象,代碼如下
function setCookie(key, val, t) {
var oDate = new Date();
oDate.setDate(oDate.getDate() + t);
document.cookie = key + '=' + val + ';expires=' + oDate.toGMTString();
}
2,獲取Cookie:
獲取其實很簡單,我們獲取Cookie的時候獲取的是一段包含所有Cookie的字符串,但是只是字符串的話還是沒有辦法取值的
方法很簡單只要我們將他們轉(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:
在我看來其實所謂的刪除不過是利用Cookie中有過期時間這一特性,將時間轉(zhuǎn)為負(fù)數(shù)也將就是說設(shè)定的時間要比現(xiàn)在時間早,代碼如下
function removeCookie(key) {
setCookie(key, '', -1);
}