JavaScript操作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=<span style="color:#ff0000;">path</span>"
  document.cookie = "name=value;expires=date;path=<span style="color:#ff0000;">path</span>"


   紅色字體path就是 cookie 的路徑,最常用的例子就是讓 cookie 在跟目錄下,這樣不管是哪個子頁面創建的 


cookie,所有的頁面都可以訪問到了:


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

 這個問題就是我在上一篇博客中提到的問題,在本地是沒有問題的,但是到了測試環境下就獲取不到cookie值了,


因爲在本地我寫測試也和獲取cookie的方法在同一個目錄下面,但是在測試環境下我寫的腳本文件直接嵌入到了別的


頁面中,所以就拿不到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 信息的存儲都


是採用未編碼的方式。所以,在設置 cookie 信息以前要先使用escape()函數將 cookie 值信息進行編碼,在獲取到 


cookie 值得時候再使用unescape()函數把值進行轉換回來。如設置cookie時:


  document.cookie = name + "="+ escape (value)


  再看看基礎用法時提到過的getCookie()內的一句:


  return unescape(document.cookie.substring(c_start,c_end))


  這樣就不用擔心因爲在cookie值中出現了特殊符號而導致 cookie 信息出錯了。


  小結

 
  在工作中越來越感覺基礎知識的重要性了,很多的知識都是要懂不懂的或者說懂的不多,在用起來的時候很難做

到靈活運用,所以在以後的學習中會改善這種弊端,需要從點到面的去理解,好好的總結纔是王道!!
發佈了364 篇原創文章 · 獲贊 389 · 訪問量 141萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章