种 session 的时候需要注意范围,也就是 cookie.domain
。
比如两个域名:a.heo.com,b.heo.com
。如果要共享 cookie,可以种一个更高层的公共域名,比如 heo.com。
当服务器 A (localhost:8080)登录用户,然后请求发到服务器 B(localhost:8081),那么结果请求 B 时,B 还会作出相应吗?这就需要考虑到分布式 session。
当用户在 A 登录,所以 session(用户登录信息)存在了 A 上,然后因为 B 没有用户信息,所以不认识用户,也做不出正确的响应。
解决方案:共享存储 ,而不是把数据放到单台服务器的内存中。
如何共享存储?
redis 管理工具可以使用 quickredis。
<!-- redis -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.6.4</version>
</dependency>
<!-- session-data-redis -->
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.6.3</version>
</dependency>
spring:
application:
name: match-mate
session:
timeout: 86400
store-type: redis
redis:
port: 6379
host: localhost
database: 0
为了测试结果,我们可以用不同的端口启动我们的后端项目。一,idea在8080端口启动。二,打包后再8081端口启动。
8080端口:
8081端口:
成功携带8080端口登录获得的用户信息(session),来请求响应8081端口的接口。
查看 redis 0号库 成功存储 session。