Spring 与 Redis 的会话 - server.session.timeout 无效

Spring Session with Redis - server.session.timeout has no effect

我按照此文档在我的 Spring 引导应用程序中设置会话:https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-redis.html

application.properties

spring.session.store-type=redis
server.session.timeout=10

发送请求后,在redis中看到如下记录:

127.0.0.1:6379> keys *
1) "spring:session:sessions:4b524c1e-e133-4d04-8b5b-40ffc3685af3"
2) "spring:session:sessions:expires:c1e2792f-f001-4a02-b812-39ab68f719ea"
3) "spring:session:sessions:expires:4b524c1e-e133-4d04-8b5b-40ffc3685af3"
4) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:105121963489487663346"
5) "spring:session:expirations:1521492480000"

我预计这些记录会在 10 秒后消失(因为 server.session.timeout 属性),但数据甚至在几分钟后仍然存在。

如何在 Spring 个会话中正确设置会话超时?

您使用的是已弃用的 server.session.timeout,它在 Spring Boot 2.0 中被替换为 server.servlet.session.timeout。随着 PR I've opened against your sample repo 的更改,正确应用了所需的会话超时。

请花时间熟悉 Spring Boot 2.0 Migration Guide 并考虑使用 spring-boot-properties-migrator 模块。

根据 Vedran 的回答并不完全正确,因为 Springboot 通用属性具有这两个属性,它们目前都处于活动状态且未弃用。

Springboot common properties

对于 Spring 会话:

spring.session.timeout= # Session timeout. If a duration suffix is not specified, seconds will be used.

网络属性

网络媒体资源 嵌入式服务器配置(ServerProperties)

server.servlet.session.timeout= # Session timeout. If a duration suffix is not specified, seconds will be used.

我也遇到了这个问题,可惜我无法通过设置“spring.session.timeout”和“server.servlet.session.timeout”来有效控制会话超时。 我的解决方案是通过注解配置session超时时间。

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 30)