maven依赖
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</dependency>
@EnableRedisHttpSession
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class RedisSessionConfig {
}
`maxInactiveIntervalInSeconds`: 设置 Session 失效时间,使用 Redis Session 之后,原 Spring Boot 的 server.session.timeout 属性不再生效。
配置文件中的`spring.session.timeout` 属性会覆盖 `@EnableRedisHttpSession` 注解中指定的 `maxInactiveIntervalInSeconds` 属性。
Spring Session Redis 的原理简析
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(RedisHttpSessionConfiguration.class)
@Configuration
public @interface EnableRedisHttpSession {
//Session默认过期时间,秒为单位,默认30分钟
int maxInactiveIntervalInSeconds() default MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS;
//配置key的namespace,默认的是spring:session,如果不同的应用共用一个redis,应该为应用配置不同的namespace,这样才能区分这个Session是来自哪个应用的
String redisNamespace() default RedisOperationsSessionRepository.DEFAULT_NAMESPACE;
//配置刷新Redis中Session的方式,默认是ON_SAVE模式,只有当Response提交后才会将Session提交到Redis
//这个模式也可以配置成IMMEDIATE模式,这样的话所有对Session的更改会立即更新到Redis
RedisFlushMode redisFlushMode() default RedisFlushMode.ON_SAVE;
//清理过期Session的定时任务默认一分钟一次。
String cleanupCron() default RedisHttpSessionConfiguration.DEFAULT_CLEANUP_CRON;
}
Spring Session 配置选项
# 配置会话超时时间: 您可以设置会话的最大空闲时间(以秒为单位),超过此时间会话将被认为是过期的。
spring.session.timeout=1800
# 配置会话存储方式: 您可以指定会话的存储方式,包括使用内存、Redis、JDBC、MongoDB 等不同的存储后端。
spring.session.store-type=redis
# 配置 Redis 存储时的会话命名空间(namespace)。通过指定命名空间,您可以在 Redis 存储中将会话数据与其他数据隔离开来,以防止键名冲突。
spring.session.redis.namespace=myapp:sessions
# 配置在 Spring Session 使用 Redis 作为会话存储时,何时将会话数据同步到 Redis 中的选项。
# `on_save`: 默认选项。会话数据在请求处理完成后,即在响应返回给客户端之前,将会话数据同步到 Redis 中。
# `immediate`: 会话数据在每次属性更改之后立即同步到 Redis 中。这意味着在每次属性更改时都会发生同步操作,可能会增加额外的开销。
# `on_change`: 会话数据仅在属性更改时才同步到 Redis 中,而不是在整个会话周期中的每个请求之后都同步。这是一个平衡了性能和一致性的选项。
spring.session.redis.flush-mode=on_change
# 设置会话 Cookie 的名称
spring.session.cookie.name=MYSESSION
# 设置会话 Cookie 的路径
spring.session.cookie.path=/app
# 设置会话 Cookie 的域
spring.session.cookie.domain=.example.com
# 设置会话 Cookie 的安全性(仅通过 HTTPS 传输)
spring.session.cookie.secure=true
# 设置会话 Cookie 的 HTTP Only 标志
spring.session.cookie.http-only=true
# 设置会话 Cookie 的 SameSite 属性
spring.session.cookie.same-site=lax
Q.E.D.