cookie path路径与domain域

2019-8-5 21:27| 作者: admin| 查看: 3192| 评论: 0|来自: 蚂蚁部落

实际开发中,使用cookie可能会出现一些奇怪的现象,或者能实现比较强大的功能。

或许这其中就有path和domain因素在起决定性作用,举两个例子:

(1).同一个站点下无法取到其他页面的cookie。

(2).单点登录功能。

下面将以上面这两个现象为契机,详细介绍一下path路径与domain域的相关知识。

一.path路径:

同一个站点下无法读取其他页面的cookie,举个例子:

在/ant/index.html页面中写入了一个cookie,却无法在同一个站点下/antzone/index.html页面中读取。

很可能是由于/ant/index.html页面使用默认path路径,或者设置了一个/antzone/index.html无法读取的路径。

路径设置语法如下:

[JavaScript] 纯文本查看 复制代码
document.cookie = "name=value;path=path"

分析如下:

(1).path用来设置cookie生效的目录,是一个绝对路径。

(2).只有path目录和其子目录下的页面可以访问当前cookie。

(3).如果不显式设置path,那么默认就是当前页面所在的目录。

由于antzone并不是ant的子目录,是兄弟关系,无法读取cookie很正常。

解决方案如下:

[JavaScript] 纯文本查看 复制代码
document.cookie = "ant=蚂蚁部落;path=/"

只要将将ant目录下的path路径设置根目录即可,这样所有的页面都可以访问它的cookie了。

二.domain域:

再来看文章开头提出的第二个问题,单点登录。

对于大型网站,通常会有多个分站,比如百度,就有贴吧、文库、站长工具等。

但是你会发现,等你登录其中一个分站的账号,你会发现所有分站都是有效的,用不着挨个登录。

这就是所谓的单点登录,使用cookie就可以比较方便的实现,那就需要用到domain。

先介绍一下一些域名的相关知识:

(1).softwhy.com是一级域名。

(2).www.softwhy.com是二级域名。

(3).data.softwhy.com是二级域名。

(4).ant.data.softwhy.com是三级域名。

以此类推,上面几个是不同的独立的域名,但是主域名都是softwhy.com。

通过domain属性可以实现cookie的跨域访问,关键点是主域名相同。

语法结构:

[JavaScript] 纯文本查看 复制代码
document.cookie="name=value;domain=domain;path=path"

分析如下:

(1).domain属性用于设置cookie生效的域。

(2).当前cookie会在设置的域和此域的子域中生效。

(3).如果使用默认值,那么cookie只会在当前页面所在的域生效。

(4).通常情况下,path路径设置为根路径/。

代码实例如下:

[JavaScript] 纯文本查看 复制代码
document.cookie="ant=蚂蚁部落;domain=softwhy.com;path=/"

通过上述设置,所有的softwhy.com子域名都会读取到此cookie。

特别说明:当显式设置domain的时候,事实上会自动在domain值前面加点(.),例如domain=softwhy.com,事实上值是.softwhy.com,那么当前cookie对softwhy.com和其子域名都是有效的,如果使用默认值,就不会加点,那么cookie只对当前域名有效,假设当前页面的域名是softwhy.com,如果domain采用默认值,千万不要误认为当前页面的cookie对其所有子域名也有效。

1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

返回顶部