一.準備:跨域
存儲於訪問者計算機中的變量,每當統一體計算機經過瀏覽器請求某個頁面,就經過js建立和取回cookie瀏覽器
本質是字符串信息,存放在客戶端的計算機中,用於客戶端計算機與服務器之間傳遞信息。安全
js經過document.cookie來讀取或者設置這些信息服務器
多用在客戶端和服務端進行通訊cookie
除了js,服務器端語言也能夠存取cookiedom
二.基礎函數
1. 大小有限制,網站
2. 最終都是以文件形式存放在客戶端當中,均可以隨便查看和修改cookie編碼
3. 每一個cookie的格式都是 key = value加密
4. cookie的形式是string
5. cookie的域和路徑的概念
5.1 域:domain,不一樣的域之間是不能跨域訪問cookie的
5.2 路徑:routing,一個網頁所建立的 cookie 只能被與這個網頁在同一目錄或子目錄下得全部網頁訪問,而不能被其餘目錄下得網頁訪問
6. 建立cookie的方式和定義變量的方式類似,都須要使用 cookie 名稱和 cookie 值。同個網站能夠建立多個 cookie ,而多個 cookie 能夠存放在同一個cookie 文件中.
三.FAQ
1.兩種類型:1)你瀏覽的當前網站自己的cookie
2)來自網頁上嵌入的廣告和其餘域名來源的cookie
2.兩種時效狀態
1)臨時性質的cookie,使用過程當中存儲,瀏覽器關閉刪除
2)設置失效的時間,瀏覽器關閉依然留存在計算機中
3.兩種清除的方式
1)瀏覽器清除 2)失效時間
注意:有時候刪除cookie以後會致使某些網頁沒法運行
4.瀏覽器能夠設置拒絕接收和訪問cookie
5.使用建議:儘可能下降cookie的使用數量,而且要儘可能小的使用cookie
四. 用法
document.cookie = 'username=leon'
若是username存在就修改不存在就是建立
1. 讀取操做
function getCookie(c_name){
if (document.cookie.length>0){ //先查詢cookie是否爲空,爲空就return ""
c_start=document.cookie.indexOf(c_name + "=") //經過String對象的indexOf()來檢查這個cookie是否存在,不存在就爲 -1
if (c_start!=-1){
c_start=c_start + c_name.length+1 //最後這個+1其實就是表示"="號啦,這樣就獲取到了cookie值的開始位置
c_end=document.cookie.indexOf(";",c_start) //這句是爲了獲得值的結束位置。由於須要考慮是不是最後一項,因此經過";"號是否存在來判斷
if (c_end==-1) c_end=document.cookie.length
return unescape(document.cookie.substring(c_start,c_end)) //經過substring()獲得了值。想了解unescape()得先知道escape()是作什麼的,都是很重要的基礎,想了解的能夠搜索下,在文章結尾處也會進行講解cookie編碼細節
}
}
return ""
}
中間涉及了編碼的操做
2. 設置有效期
var _date = new Date();
_date.setDate(_date.getDate()+30);
_date.toGMTString();
完整設置 cookie
function setCookie(c_name, value, expiredays){ // 名 值 過時時間
var exdate=new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
// 使用方法:setCookie('username','Darren',30)
若要改爲按照小時來設置 cookie的話用
exdate.setHours(exdate.getHours() + expiredays);
五. cookie高級
1. 路徑的概念
通常是隻有子域名下面能夠訪問cookie
能夠設置cookie能被其餘的目錄或者父級的目錄訪問,經過設置cookie 能夠實現
document.cookie =
"name=value;path=path"document.cookie =
"name=value;expires=date;path=path"path就是路徑
常見是設置爲path是根目錄,這樣你們均可以訪問
document.cookie = "name=value;path=/"
2. 域的概念
路徑能夠解決了在同一個域下訪問cookie,同域名直接的訪問
document.cookie = "name=value;path=path;domain=domain"
用法示例
如:www.qq.com 和 sports.qq.com公用宇哥關聯的域名 "qq.com",想要"sports.qq.com"下的cookie被"www.qq.com"訪問,就須要設置domain屬性
,同時path要設置爲"/"
寫法:
document.cookie = "username=Leon;path=/;domain=qq.com"
須要注意的是必定是同域名直接的訪問,不能把domain的值設置成非主域名以外的域名
3.關於安全性
一般cookie是使用HTTP鏈接傳遞數據,容易被查看,若是cookie的信息比較重要那麼要使用加密的數據傳輸
屬性名:secure ,默認的值爲空。當有這個屬性的時候,cookie與服務器之間就經過HTTPS或者其餘安全的協議傳遞數據。
document.cookie = "username=Leon;secure"
這個過程只會保證cookie與服務器之間的數據傳輸過程加密,而保存在本地的cookie文件並不會加密。本地得本身加密數據。
ps:secure屬性也不能表明他人看不到你的機器本地保存的cookie信息
4.關於cookie的值的設定。
cookie的值不能包含空格,分號,逗號。
通常狀況下,cookie的信息的存儲都是採用未編碼的方式。因此設置cookie的時候,要先使用escape( )將cookie值進行編碼。
在獲取到cookie的時候再使用uscape( )函數將值轉換回來
使用示例
setcookie
document.cookie = name + "=" + escape( value );
getcookie
return unescape( document.cookie.substring( c_start, c_end ));