正确使用cookie中的domain

domain的含义为域

假设有两个域名

a.b.e.f.com.cn  以下用域名1指代此域名

c.d.e.f.com.cn   以下用域名2指代此域名

在域名中,所有域名进行分级,也就是说域名1与域名2都是f.com.cn的子域名,f.com.cn又是com.cn的子域名

在域名1所使用的服务中,可以设置域名

a.b.e.f.com.cn

b.e.f.com.cn

e.f.com.cn

f.com.cn

在服务端设置domain的时候,设置domain为b.e.f.com.cn或.b.e.f.com.cn没有区别,注意前面的点,即只要是为cookie显式的声明domain,前面带不带点没有区别。这个点的奥妙后面还会提到。

设置其他域名虽然可以在响应头中有set-cookie的头,但是出于安全考虑,该头会被浏览器忽略,并不会产生真实的cookie,有一点注意,虽然在域名上来说,f.com.cn是com.cn的子域,但是浏览器是不会接收domain为com.cn的cookie的,那样互联网就乱套了。

对于域名1下的cookie,域名2可以拿到e.f.com.cn,f.com.cn这两个domain下的cookie,互联网上说的单点登录,就是以这个原理实现的。

如果存在相同名的cookie不同domain呢?

比如域名1设置设置domain为e.f.com.cn的cookie,mykey=myvalue1。

而在域名二中设置domain为c.d.e.f.com.cn的cookie,mykey=myvalue2。

此时在域名2服务端能拿到两个cookie都为mykey=myvalue,并不存在覆盖一说。

注意在域名2中如果设置domain为e.f.com.cn的cookie,mykey=myvalue3.此时会覆盖域为e.f.com.cn的mykey的值,即浏览器中,同一个域,只存在一个名为mykey的cookie。

    如果不显式设置cookie,默认当前域名这种说法对不对呢? 

    先说第一个问题,如果不显示设置cookie,那么浏览器会生成一个只针对当前域名的cookie,什么叫只针对当前域名呢?

如果有一个域名就是e.f.com.cn,在该域名下设置的cookie如果没有显示domain,在回写浏览器的时候浏览器会特殊处理,如果是火狐,你会发现该cookie的信息,有一个主机项,而域项消失了,在chrome中,虽然有域这个项,但是域的前面少了一个点,就是上面所说的,如果显示声明,不管域中带不带点,到chrome中,都是带点存储的,只有非显式声明域的cookie,浏览器存储才是不带点的,问题就在这,在e.f.com.cn服务主机中生成的cookie,只有e.f.com.cn的服务器能拿到,此时子域名是拿不到这个cookie得。

欢迎指正

posted on 2017-08-15 16:38  奇谋只在绝境中诞生  阅读(35686)  评论(2编辑  收藏  举报

导航