cookie

Cookie
一.什么是Cookie
cookie 是瀏覽器提供的一種機制,他將document對象的cookie屬性提供給javaScript。可以使用javaScript對cookie進行相關的操作。
cookie是存于用戶硬盤的一個文件,這個文件通常對應于一個域名,當瀏覽器再次訪問這個域名時,便使這個cookie可用。因此,cookie可以跨越一個域名下的多個網頁,但司機不能跨越多個域名使用。
Cookie機制將信息存儲于用戶硬盤,因此可以作為全局變量使用。以下是cookie經常應用的場合。
(1)保存用戶登陸狀態。也就是說,將登陸過的用戶id存儲在cookie中,當用戶在一定期限內再次訪問該頁面時不需要重新登陸。
(2)跟蹤用戶行為。例如,一個天氣預報的網站,能夠根據用戶選擇的地區顯示當地的天氣情況。如果每次都需要選擇地區非常繁瑣,使用cookie將用戶選擇記錄在本地,以后再次查詢改網站則不需要選擇查詢地區,非常方便。
(3)定制頁面。例如網站提供了換膚功能,可以使用cookie記錄用戶的選擇,當用戶下次登陸時,仍然可以保存上一次訪問的界面風格。
(4)創建購物車。例如淘寶就是使用cookie記錄用戶曾經瀏覽過的商品,方便隨時進行比較。
二.Cookie的缺點。
Cookie的缺點主要集中于安全性和隱私保護。主要包括以下幾種。
(1) cookie可以被禁用。當用戶非常注重個人隱私保護是,用戶可以禁用瀏覽器的cookie功能。
(2) cookie是和瀏覽器相關的。這意味著即使訪問同一個頁面,不同的瀏覽器之間所保存的cookie也是不能相互訪問的。
(3) cookie可能被刪除。因為每個cookie都是硬盤上的一個文件,因此很可能被用戶刪除。
(4) cookie安全性不夠高。所有的cookie都是以純文本的形式記錄于文件中,因此如果想要保存用戶名密碼等信息,最好實現經過加密處理。
三.設置cookie
每個cookie都是一個名/值對,可以把下面這樣一個字符串復制給document.cookie:
document.cookie =”userId=838”
如果一次要存儲多個名/值對,可以使用“;”隔開,例如:
document.cookie = “userId=838;username=hulk”
在cookie 的名或值中不能使用分號(;)、逗號(,)、等號(=)以及空格。在cookie的名中做到這點很容易,但要保存的值是不確定的。如何來存儲這些值呢?方 法是用escape()函數進行編碼,它能將一些特殊符號使用十六進制表示,例如空格將會編碼為“20%”,從而可以存儲于cookie值中,而且使用此 種方案還可以避免中文亂碼的出現。例如:
document.cookie = “str=”+escape(“I love aja”);
相當于:
document.cookie=”str=I%20love%20ajax”;
當使用escape()編碼后,在取出值以后需要使用unescape()進行解碼才能得到原來的cookie值.
改變cookie的值只需要對cookie重新賦值。
四.獲取cookie值
只能一次獲取所有的cookie值,而不能指定cookie名稱來獲得指定值,需要用戶自己分析字符串,獲取指定的cookie值。
代碼:
function getCookie(cname) {
var name = cname+"=";
console.info(document.cookie);
var ca = document.cookie.split(";");
for(var i= 0;i < ca.length;i++){
var c = ca[i].trim();
if(c.indexOf(name) == 0){
return c.substring(name.length,c.length);
}
}
return "";
}

五.設置cookie的終止時間
每個cookie都可以根據需要設置cookie的終止時間:
語法如下:
document.cookie=”userId=282;expires=UTC_string”;
例如:
var d = new Date();
d.setTime(d.getTime()+(12460601000));
var expires = "expires="+d.toUTCString();
document.cookie ="userId=292;"+expires;
該例子中,cookie的終止時間是1天后。一天后該cookie失效。

五.刪除指定名稱的cookie
將cookie的終止時間設置為一個過去時間,就是對cookie的刪除操作:
function deleteCookie(key) {
alert("刪除cookie!!!");
var d = new Date();
d.setTime(d.getTime()+(-12460601000));
var expires = "expires="+d.toUTCString();
var value = getCookie(key);
document.cookie = key+"="+value+";"+expires;
console.log("刪除cookie");
}
六.指定可訪問的cookie的路徑
默認情況先,如果在某個頁面創建了一個cookie,那么該頁面所在的目錄中的其他頁面也可以訪問改cookie。如果這個目錄下還有子目錄,則在子目錄中的頁面也可以訪問。例如在www.xxx.com/html/a.html中創建的cookie,可以被www.xxx.com/html/b.htmlwww.xxx.com/html/some/c.html訪問,但是不能被www.xxx.com/d.html訪問。
(1)為了控制cookie可以訪問的目錄,需要使用path參數設置cookie,語法如下:
documnt.cookie="name=value; path=cookieDir";
其中cookieDir表示可以訪問的cookie的目錄。例如:
document.cookie=”name=value;path=/shop”;
表示當前cookie僅能在shop目錄下使用。
如果使cookie在整個網站下可用,則可以將cookie的cookie_dir指定為根目錄,例如:
document.cookie=”userId=320,path=/”;
(2)指定可訪問的主機名
和路徑類似,主機名是指在同一個域下的不同主機,例如:www.google.comgmail.google.com就是倆個不同的主機名,默認情況下,一個主機創建的cookie在另一主機下是不能被訪問的,但是可以通過domain參數來實現對其的控制,其語法格式為:
document.cookie = “name=value;domain=cookieDomain”;
以google為例,要實現跨主機訪問,可以寫為:
document.cookie=”name=value;domain=.google.com”;
這樣所有的google.com下的主機都可以訪問該cookie。

文檔編譯者:vvv

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

推薦閱讀更多精彩內容