Spring boot Redis会话在浏览器重新启动后无法继续

Spring boot Redis会话在浏览器重新启动后无法继续,spring,spring-boot,session,redis,jedis,Spring,Spring Boot,Session,Redis,Jedis,我使用Redis作为Spring Boot应用程序(2.1.7)的会话存储(在docker容器中运行)。 在application.properties中,这些记录是: spring.session.store-type=redis server.servlet.session.timeout=7d spring.session.redis.flush-mode=on_save spring.session.redis.namespace=spring:session spring.redis.

我使用Redis作为Spring Boot应用程序(2.1.7)的会话存储(在docker容器中运行)。 在application.properties中,这些记录是:

spring.session.store-type=redis
server.servlet.session.timeout=7d
spring.session.redis.flush-mode=on_save
spring.session.redis.namespace=spring:session
spring.redis.host=localhost
spring.redis.port=6379
server.servlet.session.cookie.secure=true
server.servlet.session.cookie.http-only=true
Redis正在“工作”。因此,存在功能性会话存储。 但问题是cookie上的会话到期时间如下所示:

如果我关闭浏览器并重新打开选项卡,我将不会被记录(并且我有一个新的会话标识符)。 如果我是以用户身份登录、以管理员身份登录(下面列出的一些侦听器以不同的方式处理到期时间)或以来宾身份登录(非登录用户),则不需要effeck。每次重新启动浏览器时,我都有一个新的会话标识符

会话的通常“TTL”为7天(如属性文件中所述),但对于管理员用户,时间被缩短为1小时

    if (authentication.getPrincipal() instanceof LoggedInPersonDetails) {
        LoggedInPersonDetails loggedInPersonDetails = (LoggedInPersonDetails) authentication.getPrincipal();
        loggedInPersonDetails.getAuthorities().stream()
                .filter(authority -> !Authority.WEB_ENTER.getName().equals(authority.getAuthority()))
                .findAny()
                .ifPresent(authority ->
                        session.setMaxInactiveInterval((int) nonStandardUserSessionTimeout.getSeconds()));
    }
pom.xml中的依赖关系

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>
但它似乎不起作用。cookie上的到期时间仍设置为会话

EDIT2:我已经知道如何设置cookie的过期时间,我已经在我的Mvc配置中注册了DefaultCookieSerializer bean,并将maxAge属性设置为某个值

@Bean
public CookieSerializer defaultCookieSerializer() {
    DefaultCookieSerializer serializer = new DefaultCookieSerializer();
    serializer.setCookieMaxAge(60 * 60 * 24 * 7);

    return serializer;
}
但出现了一个新问题。cookie到期日期未更新,因为我在web上处于活动状态。例如,当到期日期设置为12:00,我在11:58重新加载页面时,cookie到期日期应更新为now()+默认最大值


我找到了一些实现自定义拦截器的解决方案,但对我来说,这似乎不是一个正确的解决方案。spring会话确实没有这样做的功能?

能否检查浏览器设置是否在关闭时自动清除cookie?此外,您还可以使用“最大年龄”字段而不是“过期”字段cookie@Gawain您好,否,浏览器不会自动清除Cookie(在5个浏览器上检查,所有其他Cookie-GA,FE自定义Cookie,…仍然有效)。我试图添加最大年龄属性,但它似乎也不起作用。(更多信息请参见“我的主题”的“编辑”部分)能否检查浏览器设置是否在关闭时自动清除cookie?此外,您还可以使用“最大年龄”字段而不是“过期”字段cookie@Gawain您好,否,浏览器不会自动清除Cookie(在5个浏览器上检查,所有其他Cookie-GA,FE自定义Cookie,…仍然有效)。我试图添加最大年龄属性,但它似乎也不起作用。(更多信息请参见“我的主题”的“编辑”部分)
@Bean
public CookieSerializer defaultCookieSerializer() {
    DefaultCookieSerializer serializer = new DefaultCookieSerializer();
    serializer.setCookieMaxAge(60 * 60 * 24 * 7);

    return serializer;
}