轉載處:聶微東大神的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的值設置成非主域的域名。