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沒有設置成功。