分布式系统中,Session 共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一。
spring官方说明:
Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案。Spring Session 提供了集群 Session(Clustered Sessions)功能,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的问题。
1.引入依赖
<!-- 共享session设置 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2.session配置
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds=86400*30) //设置session失效时间
public class SessionConfig {
}
maxInactiveIntervalInSeconds: 设置 Session 失效时间,使用 Redis Session 之后,原 Spring Boot 的 server.session.timeout 属性不再生效。
3.session测试
@RequestMapping(value = "/sessionId")
public String sessionId(HttpSession session) {
//session操作
String userName = (String) session.getAttribute("userName");
if (userName == null) {
userName = "jiafeng";
}
session.setAttribute("userName", userName);
return session.getId();
}
执行请求之后发现页面获取的session和redis中存储的session一致,说明session已经纳入redis管理。
redis中存储session和session失效时间。