js與cookie的domain和path之間的關係

1、前言

使用javascript操作cookie我們都經常使用,對cookie不是很瞭解的話可以看下這篇帖子[javascript操作cookie](http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html "javascript操作cookie");常用的cookie知識點上面那位大神已經講完了,有點點小補充順便說下,不對的地方歡迎吐槽。

2、外部js

  做網站經常要引入其他網站的js。一直以來我以爲引入的js只能操作js鏈接所在域名下的cookie。比如在太平洋時尚網的pclady.com.cn的html頁面中引入一個太平洋電腦網pconline.com.cn的js。我以爲引入的js只能操作domian爲www.pconline.com.cn的cookie;事實卻不是這樣子。引入的外部js其實等就同於本頁面的js。所以pclady.com.cn中引入pconline.com.cn的js操作的是pclady.com.cn中cookie;

3、結論

我先說結論,不懂的可以查看測試連接;
先說一個概念,域名wwww1.pclady.com.cn 頂級域名.com.cn 一級域名pclady.com.cn;二級域名 www1.pclady.com.cn

3.1 默認domain和路徑

設置cookie時 cookie默認的domain爲html文件所在的域名,path爲html文件所在的路徑比如http://www1.pclady.com.cn/zt/20160623/testCookie.html 鏈接中的js設置cookie,默認情況下cookie情況如圖:

3.2 domain規則,

  • 設置cookie——設置cookie的時候,domain要符合域名的規則,比如可以設置成www1.pclady.com.cn和pclady.com.cn 但是不能設置成pclady。要有.com.cn或者其他域名做結尾。 通過js手動設置cookie的domain都是以.開頭的。比如設置domain=pclady.com.cn,實際的domain名爲.pclady.com.cn;刪除cookie時加不加.都可以。
  • 獲取cookie——js只能獲取domian大於等於當前頁面域名的cookie。比如http://www1.pclady.com.cn/zt/20160623/testCookie.html頁面中的js能獲取domain爲“www1.pclady.com.cn”和“.www1.pclady.com.cn”和“.pclady.com.cn”但是獲取不到“g.pclady.com.cn”中的cookie;
  • 刪除cookie——要刪除一個cookie,domain值必須跟要刪除cookie的domain相同,默認的domain爲html文件的domain。
  • 跨域domain——js不可以把cookie設置成不同與html域名的domian。cookie設置不會成功,但不會影響後面程序對cookie的操作。
  • 錯誤——如果domain設置錯誤,該cookie將不會被創建,並且後續對cookie的操作不論正確與否都會被瀏覽器禁止。

3.3 path規則

  • 設置cookie——js設置path要以"/"開頭,比如html路徑爲"/zt/20160623/",路徑可以設置成"/"或"/zt"。
  • 獲取cookie——使用js只能獲取path大於等於當前頁面path的cookie,比如html路徑爲/zt/20160623/,使用js只能獲取“/zt/20160623/”和“/zt”和“/”路徑下的cookie。不能獲取其他路徑下的cookie
  • 刪除cookie——刪除cookie的時候路徑也必須相同,默認的路徑是html的path路徑。
  • 錯誤——如果path不是以"/"開頭的則創建cookie的path使用默認的path;如果是以"/"開頭但是設置錯了,路徑名不存在或者直接設置成子路徑。比如設置成"/20160623"或者"/zt1",該cookie將不會被創建,並且後續對cookie的操作不論正確與否都會被瀏覽器禁止。

4、總結

4.1、頁面能訪問那些cookie跟從哪裏引入js沒有半毛錢關係。而跟html頁面本身的domain和path有很直接的關係

4.2、要刪除一個cookie,domain和路徑必須完全相同。

5、測試過程(可忽略)

5.1、測試程序:

5.2.1、pclady下的cookie設置情況

注意:chrome的Resources面板下能查看哪些cookie就可以通過js獲取哪些cookie。查看不到的當然也不能通過js獲取。這也證明了,js操作cookie只跟頁面有關,跟js來自哪裏沒有關係。
html鏈接:http://www1.pclady.com.cn/zt/20160623/testCookie.html
設置cookie的js鏈接:http://www1.pconline.com.cn/zt/20160622/GCookie-bf.js

5.3、pcbaby下的cookie情況

html鏈接:http://www1.pclady.com.cn/zt/20160623/testCookie.html
設置cookie的js鏈接:http://www1.pconline.com.cn/zt/20160622/GCookie-bf.js
檢查cookie鏈接:http://www1.pcbaby.com.cn/zt/20160623/testCookie2.html

chrome的Resources面板中cookie是空的。所以cookie沒有設置成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章