最近開發的過程中遇到一個小坑:兩個不同頁面 相互依賴 cookie,在登錄 與退出登錄的時候 都需要操作同一個cookie,但是后者再退出登錄時候,要讓cookie過期,使用了如下的方法
function delCookie() {
var exp = new Date();
exp.setTime(exp.getTime()- 1);
var cval = common.getCookie("token");
if (cval != null)
console.log(document.cookie)
console.log("token=" + escape(cval) + ";expires=" + exp.toGMTString())
// document.cookie ="token=" + escape(cval) + ";expires=" + exp.toGMTString();
document.cookie = "token" + "=" + escape(cval) + ";expires=" + exp.toGMTString()+";path= /";
console.log(document.cookie)
}
一般情況下,設置cookie當前時間過期,是有效的,但是在多個頁面之間相互依賴的時候,需要在設置cookie的時候 ,添加path=/
function addCookie(mess) {
var exp = new Date();
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
document.cookie = "token=" + escape(mess) + ";expires=" + exp.toGMTString()+";path= /";
}
在默認情況下,只有設置 cookie的網頁才能讀取該 cookie。如果想讓一個頁面讀取另一個頁面設
置的cookie,必須設置cookie的路徑。cookie的路徑用於設置能夠讀取 cookie的頂級目錄。將這
個路徑設置為網站的根目錄,可以讓所有網頁都能互相讀取 cookie (一般不要這樣設置,防止出現沖突) 。
下面是我查資料找到的 跟大家分享一下 : 詳情: http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html
一.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 的問題,咱們接着說 cookie 實現同域之間訪問的問題。語法如下:
document.cookie = "name=value;path=path;domain=domain"
紅色的domain就是設置的 cookie 域的值。
例如 "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 信息都是使用HTTP連接傳遞數據,這種傳遞方式很容易被查看,所以 cookie 存儲的信息容易被竊取。假如 cookie 中所傳遞的內容比較重要,那么就要求使用加密的數據傳輸。
所以 cookie 的這個屬性的名稱是“secure”,默認的值為空。如果一個 cookie 的屬性為secure,那么它與服務器之間就通過HTTPS或者其它安全協議傳遞數據。語法如下:
document.cookie = "username=Darren;secure"
把cookie設置為secure,只保證 cookie 與服務器之間的數據傳輸過程加密,而保存在本地的 cookie文件並不加密。如果想讓本地cookie也加密,得自己加密數據。
注:就算設置了secure 屬性也並不代表他人不能看到你機器本地保存的 cookie 信息,所以說到底,別把重要信息放cookie就對了,囧...
四.cookie 編碼細節
如果對這個不了解的話編碼問題確實是一個坑,所以還是詳細說說。
在輸入cookie信息時不能包含空格,分號,逗號等特殊符號,而在一般情況下,cookie 信息的存儲都是采用未編碼的方式。所以,在設置 cookie 信息以前要先使用escape()函數將 cookie 值信息進行編碼,在獲取到 cookie 值得時候再使用unescape()函數把值進行轉換回來。如設置cookie時:
document.cookie = name + "="+ escape (value)
再看看基礎用法時提到過的getCookie()內的一句:
return unescape(document.cookie.substring(c_start,c_end))
這樣就不用擔心因為在cookie值中出現了特殊符號而導致 cookie 信息出錯了。