關於cookie

一.準備:跨域

存儲於訪問者計算機中的變量,每當統一體計算機經過瀏覽器請求某個頁面,就經過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

四. 用法

  1. document.cookie = 'username=leon'

若是username存在就修改不存在就是建立

1. 讀取操做

  1. function getCookie(c_name){
  2.     if (document.cookie.length>0){  //先查詢cookie是否爲空,爲空就return ""
  3.       c_start=document.cookie.indexOf(c_name + "=")  //經過String對象的indexOf()來檢查這個cookie是否存在,不存在就爲 -1  
  4.       if (c_start!=-1){
  5.         c_start=c_start + c_name.length+1  //最後這個+1其實就是表示"="號啦,這樣就獲取到了cookie值的開始位置
  6.         c_end=document.cookie.indexOf(";",c_start)  //這句是爲了獲得值的結束位置。由於須要考慮是不是最後一項,因此經過";"號是否存在來判斷
  7.         if (c_end==-1) c_end=document.cookie.length  
  8.         return unescape(document.cookie.substring(c_start,c_end))  //經過substring()獲得了值。想了解unescape()得先知道escape()是作什麼的,都是很重要的基礎,想了解的能夠搜索下,在文章結尾處也會進行講解cookie編碼細節
  9.       }
  10.     }
  11.     return ""
  12. }

中間涉及了編碼的操做

2. 設置有效期

  1. var _date = new Date();
  2. _date.setDate(_date.getDate()+30);
  3. _date.toGMTString();

完整設置 cookie

  1. function setCookie(c_name, value, expiredays){    // 名  值  過時時間
  2.     var exdate=new Date();
  3.     exdate.setDate(exdate.getDate() + expiredays);
  4.     document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
  5.   }
  6. // 使用方法:setCookie('username','Darren',30)

若要改爲按照小時來設置 cookie的話用

  1. exdate.setHours(exdate.getHours() + expiredays);

 

五. cookie高級

1. 路徑的概念

通常是隻有子域名下面能夠訪問cookie

能夠設置cookie能被其餘的目錄或者父級的目錄訪問,經過設置cookie 能夠實現

  1. document.cookie = "name=value;path=path"
  2. document.cookie = "name=value;expires=date;path=path"

path就是路徑

常見是設置爲path是根目錄,這樣你們均可以訪問

  1. document.cookie = "name=value;path=/"

2. 域的概念

路徑能夠解決了在同一個域下訪問cookie,同域名直接的訪問

  1. 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要設置爲"/"

寫法:

  1. document.cookie = "username=Leon;path=/;domain=qq.com"

須要注意的是必定是同域名直接的訪問,不能把domain的值設置成非主域名以外的域名

 

3.關於安全性

一般cookie是使用HTTP鏈接傳遞數據,容易被查看,若是cookie的信息比較重要那麼要使用加密的數據傳輸

屬性名:secure ,默認的值爲空。當有這個屬性的時候,cookie與服務器之間就經過HTTPS或者其餘安全的協議傳遞數據。

  1. document.cookie = "username=Leon;secure"

這個過程只會保證cookie與服務器之間的數據傳輸過程加密,而保存在本地的cookie文件並不會加密。本地得本身加密數據。

ps:secure屬性也不能表明他人看不到你的機器本地保存的cookie信息

 

4.關於cookie的值的設定。

cookie的值不能包含空格,分號,逗號。

通常狀況下,cookie的信息的存儲都是採用未編碼的方式。因此設置cookie的時候,要先使用escape( )將cookie值進行編碼。

在獲取到cookie的時候再使用uscape( )函數將值轉換回來

使用示例

setcookie

  1. document.cookie = name + "=" + escape( value );

getcookie

  1. return unescape( document.cookie.substring( c_start, c_end ));
這樣不須要考慮cookie中包含特殊的值
相關文章
相關標籤/搜索