工做中有好多同事問我,那個誰,爲何我用網上封裝的獲取cookie的方法卻獲取不到本身網站
上的cookie
呢?瀏覽器
這個問題,咱們還要從document.cookie
提及(其實網上封裝的獲取cookie的方法裏面也是用的這個方法),
MDN上給的文檔:
注意,這裏給出的解釋是獲取全部可今後位置訪問
到的cookie;cookie
不着急,我們繼續往下看;
這是文檔裏給出的屬性值;dom
其實形成取不到值得主要緣由就是path這個屬性
,
這裏的path屬性是指你能夠從xxx.xxx.com/xxx/x中訪問到cookie
(當時是在這個頁面設置的cookie),但在xxx.xxx.com這個目錄下是訪問不到
此cookie
的;網站
這就至關於你在A店裏定了一盒曲奇餅乾,但你去B店拿,顯然是拿不到的。this
在瀏覽器中也能夠很方便很直觀的看到區別:spa
可是這裏也有一個規則,就是子文件夾下
的頁面能夠訪問上級頁面存下
的cookie,但父級文件夾的頁面
訪問不到子文件夾下
的頁面建立
的cookie;
因此,一般咱們在設置cookie的時候,能夠統一把path設置爲/
;
下面附cookie的CRUD代碼:3d
var cookie = { /** * 設置cookie * @param name cookie的名稱 * @param value cookie的值 * @param day cookie的過時時間 */ setCookie: function (name, value, day) { if (day !== 0) { //當設置的時間等於0時,不設置expires屬性,cookie在瀏覽器關閉後刪除 var expires = day * 24 * 60 * 60 * 1000; var date = new Date(+new Date() + expires); document.cookie = name + "=" + escape(value) + ";expires=" + date.toUTCString()+";path=/"; } else { document.cookie = name + "=" + escape(value)+";path=/"; } }, /** * 獲取對應名稱的cookie * @param name cookie的名稱 * @returns {null} 不存在時,返回null */ getCookie: function (name) { var arr; var reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if (arr = document.cookie.match(reg)) return unescape(arr[2]); else return null; }, /** * 刪除cookie * @param name cookie的名稱 */ delCookie: function (name) { this.setCookie(name, ' ', -1); } }