java会话技术–03–Session覆盖问题
代码位置
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/sessionCookie-learn
1、现象
同一域名,同一个服务,不同的端口,存在session会话覆盖的问题。
2、操作
2.1、核心代码
2.2、启动服务
启动8081和8082
-Dserver.port=8081
-Dserver.port=8082
2.3、8081 测试
生成的 JSESSIONID
JSESSIONID=D9FA80B010566B773784580F641AEA34
2.4、8082 测试
生成的 JSESSIONID
JSESSIONID=2A7D4B716D12E98B3BB8585231AF1823
可以看到 和 8081是不一样的。
2.5、8081 测试
2.5.1、查看 JSESSIONID
2.5.2、获取会话数据测试
3、原因
因cookie冲突导致session丢失,因为8081和8082使用SESSION会话的名称都是JSESSIONID。
3.1、cookie覆盖机制
一个新的cookie与一个已存在的cookie比较
- 只有 NAME、Domain和Path 属性值均相同,则旧的cookie会被丢弃
- 只要 NAME,Domain和Path 属性值有一个不同,则旧的cookie就不会被丢弃
4、解决方案
为不同的应用,设置自己的会话名称。不使用默认的JSESSIONID
4.1、操作
修改配置文件
server.servlet.session.cookie.name = JSESSIONID_8081
4.2、验证
4.2.1、8081
可以看到8081服务的会话名称是
JSESSIONID_8081=F7E0127694D0A46DF9AA125951EDCCC3
4.2.2、8082
可以看到8082服务的会话名称是
JSESSIONID_8082=3A9B93A9863FD01701620C24FD476788
4.2.3、8081
版权声明:本文为zhou920786312原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。