2016-07-29 56 views
2

我正在使用Spring會話和Postgres。會話使用JdbcOperationsSessionRepository保存到我的Postgres數據庫中。爲什麼我的Spring會話不斷從我的JDBC存儲中刪除?

我用於會話的默認非活動時間爲30天。一旦用戶登錄,我做request.getSession().setMaxInactiveInterval()並將其更改爲180天。

但由於某些原因,180天沒有得到尊重,會話每小時都會被刪除。例如:

本次會議應持續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

原來這是庫中的一個bug:https://github.com/spring-projects/spring-session/issues/580 – RainSear

回答

0

正如評論指出,這與已報道gh-580春季會議JDBC的集成問題。

要解決此問題,直到解決方案交付,您可以擴展JdbcOperationsSessionRepository並覆蓋cleanUpExpiredSessions方法。之後,您只需要通過提供延伸JdbcOperationsSessionRepository並命名爲sessionRepository(bean名稱很重要,因爲它必須與JdbcHttpSessionConfiguration中的值匹配以重寫它)來重寫默認JDBC會話存儲庫bean。

例如:

@EnableJdbcHttpSession 
class SessionConfig { 

    // omitted data source & tx manager config 

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

} 

你可以在評論概述的gh-580cleanUpExpiredSessions解決方案。

相關問題