插件窝 干货文章 cookie 的path路径与domain域

cookie 的path路径与domain域

cookie 单点登陆 domain域 1274    来源:插件窝    2019-10-08

实际开发中,使用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对其所有子域名也有效。