工做中有好多同事问我,那个谁,为何我用网上封装的获取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); } }