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比较

  1. 只有 NAME、Domain和Path 属性值均相同,则旧的cookie会被丢弃
  2. 只要 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

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐