摘要:例如,如果没有定义,默认为当前文档位置的路径的域名部分。与早期规范相反的是,在域名前面加符将会被忽视,因为浏览器也许会拒绝设置这样的。
工作中有好多同事问我,那个谁,为什么我用网上封装的获取cookie的方法却获取不到自己网站上的cookie呢?
这个问题,我们还要从document.cookie说起(其实网上封装的获取cookie的方法里面也是用的这个方法),
MDN上给的文档:
注意,这里给出的解释是获取所有可从此位置访问到的cookie;
不着急,咱们继续往下看;
这是文档里给出的属性值;
;path=path (例如 "/", "/mydir") 如果没有定义,默认为当前文档位置的路径。
;domain=domain (例如 "example.com", "subdomain.example.com") 如果没有定义,默认为当前文档位置的路径的域名部分。与早期规范相反的是,在域名前面加 . 符将会被忽视,因为浏览器也许会拒绝设置这样的cookie。如果指定了一个域,那么子域也包含在内。
;max-age=max-age-in-seconds (例如一年为606024*365)
;expires=date-in-GMTString-format 如果没有定义,cookie会在对话结束时过期
;secure (cookie只通过https协议传输)
其实造成取不到值得主要原因就是path这个属性,
这里的path属性是指你可以从xxx.xxx.com/xxx/x中访问到cookie(当时是在这个页面设置的cookie),但在xxx.xxx.com这个目录下是访问不到此cookie的;
这就相当于你在A店里定了一盒曲奇饼干,但你去B店拿,显然是拿不到的。
在浏览器中也可以很方便很直观的看到区别:
但是这里也有一个规则,就是子文件夹下的页面可以访问上级页面存下的cookie,但父级文件夹的页面访问不到子文件夹下的页面创建的cookie;
所以,通常我们在设置cookie的时候,可以统一把path设置为/;
下面附cookie的CRUD代码:
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); } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/105086.html
摘要:例如,如果没有定义,默认为当前文档位置的路径的域名部分。与早期规范相反的是,在域名前面加符将会被忽视,因为浏览器也许会拒绝设置这样的。 工作中有好多同事问我,那个谁,为什么我用网上封装的获取cookie的方法却获取不到自己网站上的cookie呢? 这个问题,我们还要从document.cookie说起(其实网上封装的获取cookie的方法里面也是用的这个方法),MDN上给的文档:sho...
摘要:保存中文上面我们的例子保存的是英文字符,下面我们来看下保存中文字符会怎么样。出异常了中文属于字符,英文数据字符,中文占个字符或者个字符,英文占个字符。如果为,则表示删除该。的值规定为域名的隐私安全机制决定是不可跨域名的。 什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一...
阅读 1786·2021-11-11 16:55
阅读 1436·2019-08-30 15:54
阅读 739·2019-08-29 15:34
阅读 2216·2019-08-29 13:11
阅读 2890·2019-08-26 13:28
阅读 1864·2019-08-26 10:49
阅读 965·2019-08-26 10:40
阅读 2535·2019-08-23 18:21