2016-07-29 5 views
2

私はPostgresでSpringセッションを使用しています。セッションはJdbcOperationsSessionRepositoryを使用して私のPostgresデータベースに保存されます。SpringのセッションがJDBCストアから削除され続けるのはなぜですか?

私のセッションで使用しているデフォルトの非アクティブ時間は30日間です。ユーザーがログインすると、私はrequest.getSession().setMaxInactiveInterval()をして180日に変更します。

しかし、何らかの理由で180日は尊重されず、セッションは1時間ごとに削除され続けます。たとえば:

このセッションでは、180日間続いているはずですが、それは、すぐに次の時間が始まると削除されました。

これらのセッションがどのように削除されるのを防ぐことができ、180日間スティックすることができますか?

私はthis functionがこれと関連があると推測しています。

コメントで示されているように
private void setupSession(HttpServletRequest request, User user) { 
    HttpSession session = request.getSession(); 
    session.setMaxInactiveInterval(15552000); 
    session.setAttribute("user-id", user.id); 
} 
+0

設定を投稿できますか? – codependent

+0

私がよく理解していれば、未ログインのユーザーのセッション有効期限は30日、ユーザーは180日間ログインしてもらいたいですか? – codependent

+0

これはライブラリのバグです:https://github.com/spring-projects/spring-session/issues/580 – RainSear

答えて

0

が、これはgh-580で報告されている春のセッションJDBCとの統合に問題がある:

は、ここでユーザーの最大非アクティブ間隔を延長自分のアプリケーションの一部です。

解決策が提供されるまでこの問題を回避するには、JdbcOperationsSessionRepositoryを拡張してcleanUpExpiredSessionsメソッドを上書きすることができます。その後、デフォルトのJDBCセッションリポジトリBeanをオーバーライドする必要があります。これは、という名前のBeanを提供し、sessionRepositoryという名前です(beanの名前は、それをオーバーライドするためにJdbcHttpSessionConfigurationのものと一致する必要があるため重要です)。あなたはgh-580上のコメントで概説cleanUpExpiredSessionsための解決策を見つけることができます

@EnableJdbcHttpSession 
class SessionConfig { 

    // omitted data source & tx manager config 

    @Bean 
    MyJdbcOperationsSessionRepository sessionRepository(...) { 
     return new ... 
    } 

} 

:たとえば

関連する問題