An invalid domain [.B.A.com] was specified for this cookie域名问题分析与解决

1、 问题描述

项目 B.A.com 二级域名下挂有三级域名C.B.A.com
为了使域名之间实现cookie共享,设置cookie domain 为.B.A.com
在老版本上该设计可行,但进行代码迁移后代码报错不可行
问题出在tomcat不同版本域名解析不同

2、问题分析

在tomcat8.5上是使用 org.apache.tomcat.util.http.Rfc6265CookieProcessor
在tomcat8.0上使用的是 org.apache.tomcat.util.http.LegacyCookieProcessor
Rfc6265CookieProcessor domain规则如下

1、必须是1-9、a-z、A-Z、. 、- (注意是-不是_)这几个字符组成
2、必须是数字或字母开头
3、必须是数字或字母结尾

于是“.B.A.com”写入不可行

3、问题解决

1、修改tomcat配置

编辑 Tomcat/conf/content.xml

增加配置在 context 中
CookieProcessor className=“org.apache.tomcat.util.http.LegacyCookieProcessor”

2、使用一级域名

1.现有如下三个域名:

顶级域名:A.com
二级域名:B.A.com
三级域名:C.B.A.com

2.访问顶级域名

访问顶级域名 A.com,设置如下四种情况的cookie
Y表示可以共享cookie,N表示无法共享

domain参数A.comB.A.comC.B.A.com备注
setcookie(‘name’, time()+1)YYY默认设置当前访问的域名,即顶级域名
setcookie(‘name’, time()+1),’/’,‘A.comYYY设置顶级域名,全部共享
setcookie(‘name’, time()+1),’/’,‘B.A.comNNN
setcookie(‘name’, time()+1),’/’,‘C.B.A.comNNN
3.访问二级域名

访问顶级域名 B.A.com,设置如下四种情况的cookie
Y表示可以共享cookie,N表示无法共享

domain参数A.comB.A.comC.B.A.com备注
setcookie(‘name’, time()+1)NYY默认设置当前访问的域名,即二级域名
setcookie(‘name’, time()+1),’/’,‘A.comYYY设置顶级域名,全部共享
setcookie(‘name’, time()+1),’/’,‘B.A.comNYY
setcookie(‘name’, time()+1),’/’,‘C.B.A.comNNN
4.访问三级域名

访问顶级域名 B.A.com,设置如下四种情况的cookie
Y表示可以共享cookie,N表示无法共享

domain参数A.comB.A.comC.B.A.com备注
setcookie(‘name’, time()+1)NNY默认设置当前访问的域名,即三级域名
setcookie(‘name’, time()+1),’/’,‘A.comYYY设置顶级域名,全部共享
setcookie(‘name’, time()+1),’/’,‘B.A.comNNN设置二级域名,无法共享
setcookie(‘name’, time()+1),’/’,‘C.B.A.comNNY设置三级域名
5.总结

在setcookie中省略domain参数,那么domain默认为当前域名
domain参数可以设置父域名以及自身,但不能设置其它域名,包括子域名,否则cookie不起作用
如果cookie设置为顶级域名,则全部的域名,包括顶级域名、二级域名、三级域名等,都可以共享该cookie
如果cookie设置为当前域名,则当前域名及其下面的所有子域名可以共享该cookie

参考文章 https://blog.youkuaiyun.com/supermao1013/article/details/83827310

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值