cookie

轉載處:聶微東大神的cookie博文

博文如有不妥,請賜教 (本人前端小菜雞一枚);

定義(w3c)

cookie 是存儲于訪問者的計算機中的變量。每當同一臺計算機通過瀏覽器請求某個頁面時,就會發送這個 cookie。你可以使用 JavaScript 來創建和取回 cookie 的值

設置和獲取

  • 設置 (特殊情況下的編碼問題)
    在設置方面很簡單

    document.cookie = "name=strong";
    就這樣一個簡單的句子就設定了一個cookie 鍵值對

    但是當給cookie設置一個有特殊字符的復雜值時,又涉及到了編碼問題。

    var a = "stron;g";
    document.cookie = "name="+a;
    document.cookie = "name1=" + escape(a);

可以看到,通過編碼成功地將特殊字符 ';' 寫進了cookie

  • 獲取

    document.cookie是一段字符串,這就給獲取添加了一定的難度
    我認為最簡單的獲取方式是通過 正則表達式,但是這有一個前提,你要回正則表達式
    每一次寫正則表達式都是一臉懵逼,最后還是網上down了一個函數


  function getCookie(name)
    {
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
        if(arr=document.cookie.match(reg)){
            return unescape(arr[2]);
        }
        else
            return null;
    }

    document.cookie="name=strong";
    console.log(getCookie(name))  //strong

**當然也要注意當使用編碼函數對特殊字符編碼時,獲取時要進行解碼**

一些其他屬性

有效期

w3c上面經典的代碼:

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);

在上面的代碼中,設置的時間是以 '天' 來為單位的,
exdate.setHours(exdate.getHours() + expiredays);這樣就是一小時計算,當然
參數中的expiredays也就是期望的小時數。

路徑

一.cookie 路徑概念

在基礎知識中有提到 cookie 有域和路徑的概念,現在來介紹路徑在 cookie 中的作用。

cookie 一般都是由于用戶訪問頁面而被創建的,可是并不是只有在創建 cookie 的頁面才可以訪問這個 cookie。

默認情況下,只有與創建 cookie 的頁面在同一個目錄或子目錄下的網頁才可以訪問,這個是因為安全方面的考慮,造成不是所有頁面都可以隨意訪問其他頁面創建的 cookie。舉個例子:

在 "http://www.cnblogs.com/Darren_code/" 這個頁面創建一個cookie,那么在"/Darren_code/"這個路徑下的頁面如: "http://www.cnblogs.com/Darren_code/archive/2011/11/07/Cookie.html"這個頁面默認就能取到cookie信息。

可在默認情況下, "http://www.cnblogs.com"或者 "http://www.cnblogs.com/xxxx/" 就不可以訪問這個 cookie(光看沒用,實踐出真理_)。

那么如何讓這個 cookie 能被其他目錄或者父級的目錄訪問類,通過設置 cookie 的路徑就可以實現。例子如下:


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

最常用的例子就是讓 cookie 在跟目錄下,這樣不管是哪個子頁面創建的 cookie,所有的頁面都可以訪問到了:


  document.cookie = "name=Darren;path=/"

路徑能解決在同一個域下訪問 cookie 的問題,咱們接著說 cookie 實現同域之間訪問的問題。語法如下:

document.cookie = "name=value;path=path;domain=domain"

例如 "www.qq.com" 與 "sports.qq.com" 公用一個關聯的域名"qq.com",我們如果想讓 "sports.qq.com" 下的cookie被 "www.qq.com" 訪問,我們就需要用到 cookie 的domain屬性,并且需要把path屬性設置為 "/"。例:

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

注:一定的是同域之間的訪問,不能把domain的值設置成非主域的域名。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 什么是 Cookie “cookie 是存儲于訪問者的計算機中的變量。每當同一臺計算機通過瀏覽器請求某個頁面時,就...
    恩德_b0c2閱讀 432評論 0 3
  • 作者:晚晴幽草軒www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饑人谷_Dylan閱讀 1,232評論 0 51
  • HTTP cookie(也稱為web cookie,網絡cookie,瀏覽器cookie或者簡稱cookie)是網...
    留七七閱讀 18,099評論 2 71
  • 背景在HTTP協議的定義中,采用了一種機制來記錄客戶端和服務器端交互的信息,這種機制被稱為cookie,cooki...
    時芥藍閱讀 2,382評論 1 17
  • 注:本文轉載自前端大全 背景 在HTTP協議的定義中,采用了一種機制來記錄客戶端和服務器端交互的信息,這種機制被稱...
    楠小忎閱讀 687評論 0 0