实际开发中,使用cookie可能会出现一些奇怪的现象,或者能实现比较强大的功能。或许这其中就有path和domain因素在起决定性作用,举两个例子:
(1).同一个站点下无法取到其他页面的cookie。
(2).单点登录功能。
下面将以上面这两个现象为契机,详细介绍一下path路径与domain域的相关知识。
一.path路径:
同一个站点下无法读取其他页面的cookie,举个例子:
在/ant/index.html页面中写入了一个cookie,却无法在同一个站点下/antzone/index.html页面中读取。
很可能是由于/ant/index.html页面使用默认path路径,或者设置了一个/antzone/index.html无法读取的路径。
路径设置语法如下:
document.cookie =
"name=value;path=path"
分析如下:
(1).path用来设置cookie生效的目录,是一个绝对路径。
(2).只有path目录和其子目录下的页面可以访问当前cookie。
(3).如果不显式设置path,那么默认就是当前页面所在的目录。
由于antzone并不是ant的子目录,是兄弟关系,无法读取cookie很正常。
解决方案如下:
document.cookie =
"ant=插件窝;path=/"
只要将将ant目录下的path路径设置根目录即可,这样所有的页面都可以访问它的cookie了。
二.domain域:
再来看文章开头提出的第二个问题,单点登录。
对于大型网站,通常会有多个分站,比如百度,就有贴吧、文库、站长工具等。
但是你会发现,等你登录其中一个分站的账号,你会发现所有分站都是有效的,用不着挨个登录。
这就是所谓的单点登录,使用cookie就可以比较方便的实现,那就需要用到domain。
先介绍一下一些域名的相关知识:
(1).chajianwo.com是一级域名。
(2).www.chajianwo.com是二级域名。
(3).data.chajianwo.com是二级域名。
(4).ant.data.chajianwo.com是三级域名。
以此类推,上面几个是不同的独立的域名,但是主域名都是chajianwo.com。
通过domain属性可以实现cookie的跨域访问,关键点是主域名相同。
语法结构:
document.cookie=
"name=value;domain=domain;path=path"
分析如下:
(1).domain属性用于设置cookie生效的域。
(2).当前cookie会在设置的域和此域的子域中生效。
(3).如果使用默认值,那么cookie只会在当前页面所在的域生效。
(4).通常情况下,path路径设置为根路径/。
代码实例如下:
document.cookie=
"ant=插件窝;domain=chajianwo.com;path=/"
通过上述设置,所有的chajianwo.com子域名都会读取到此cookie。
特别说明:当显示设置domain的时候,事实上会自动在domain值前面加点(.),例如domain=chajianwo.com,事实上值是.chajianwo.com,那么当前cookie对chajianwo.com和其子域名都是有效的,如果使用默认值,就不会加点,那么cookie只对当前域名有效,假设当前页面的域名是chajianwo.com,如果domain采用默认值,千万不要误认为当前页面的cookie对其所有子域名也有效。