cookie過期設置問題


最近開發的過程中遇到一個小坑:兩個不同頁面 相互依賴 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 信息出錯了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM