web-dev-qa-db-ja.com

Spring Bootアプリのセッションタイムアウト

SpringBoot MVC /セキュリティアプリ1.2.2.RELEASEを作成し、application.propertiesに次のようなサーバー設定が含まれています

#Tomcat port and contextPath details
server.port=8080
server.contextPath=/test
#server.session-timeout=120
server.sessionTimeout=120

ドキュメント の状態

server.session-timeout= # session timeout in seconds

ServerProperties.Java はsessionTimeoutを使用します。

私が提示したapplication.propertiesコードを見ると、私は独立して一緒に試してみましたが、2分後にタイムアウトにならず、セッションハンドリングを実行するために明示的に記述された他のコードはありません。

誰かがこの問題に遭遇しましたか?何が欠けているか、間違っていますか?

12
victor

どういうわけか設定だけはわかりません

server.session.timeout=120 

ただし、セッションタイムアウトとCookieの最大経過時間の両方を次のように設定すると、うまくいきませんでした。

server.session.cookie.max-age=120
server.session.timeout=120 

それは完全に機能します

10
Manish Kothari

このserver.session.timeoutの目的がわからないので、特定の数値に設定してセッションの作成を監視しても、セッションの有効期限は変更されません。

私は春のセッションとredisの統合を使用していますが、私の場合、maxInactiveIntervalInSecondsを120(秒)のように設定する必要があります。これは、redisHttpSessionConfigurationを使用して行うことができます。

セッションを探すためにredisに行くと、有効期限が120秒に変更され、セッションタイムアウトが機能していることがわかります。

私の提案の1つは、プログラムで、またはプロパティファイルでセッションのmaxInactiveIntervalInSeconds(または同様のもの)を構成して、セッションの変更を監視できるかどうかを確認することです。

2
Phoebe Li

(これは、この記事の執筆時点のSpring 1.5.xに適用されます)

Redisセッション@EnableRedisHttpSessionを使用している場合(他のコメント @ Phoebe Liの場合 など)、アプリケーションプロパティserver.sessionは適用されません。次のようなコードで手動で設定する必要があります。

@EnableRedisHttpSession
public class HttpSessionConfig {
    @Bean
    public RedisOperationsSessionRepository sessionRepository(RedisConnectionFactory factory) {
        RedisOperationsSessionRepository sessionRepository = new RedisOperationsSessionRepository(factory);

        //Set the TTL of redis' key, which in turn will expire session when TTL is reached
        sessionRepository.setDefaultMaxInactiveInterval(15); //e.g. 15 seconds

        return sessionRepository;
    }I
}
1
EwyynTomato

Spring Boot 2アプリのapplication.yml

# A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits
server:
  servlet:
    session:
      cookie:
        max-age: -1
      timeout: -1

これらの設定により、JSESSIONID Cookieの有効期限は「ブラウジングセッションが終了するとき」に設定されます。

0
naXa

この両方のステートメントを追加してみてください。

server.session.cookie.max-age=120
server.session.timeout=120

ここに私のブログで完全な例を見つけることができます: http://www.onlinetutorialspoint.com/spring-boot/how-to-set-spring-boot-Tomcat-session-timeout.html