2

spring-session を使用していますが、とても気に入っています。しかし、私は何かが欠けていると思います。私のアプリケーションでは、フローは次のようになります: 1) ユーザーがリクエストHomepageControllerし、そのコントローラーがリクエストに属性を入れようとします:

    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();

    final String sessionIds = sessionStrategy.getRequestedSessionId(request);

    if (sessionIds != null) {
        final ExpiringSession session = sessionRepository.getSession(sessionIds);
        if (session != null) {
            session.setAttribute("attr", "value");
            sessionRepository.save(session);
            model.addAttribute("session", session);
        }
    }

ご覧のとおり、request-cookie から sessionID を取得しようとし、リポジトリにその ID を持つセッションがある場合は、それを使用します (属性を追加します)。これは完璧ですが、 2 番目の要求の後でのみです。なんで?サーバーを再起動すると、Cookie が古い値のままになり、最初のリクエストでリポジトリ内のセッションが見つからないためです。Cookie は更新されますが、応答がコミットされた後、2 番目の要求は正しくなります。ここで質問があります。私のロジックのどこが間違っているのでしょうか?また、最初のリクエストをサポートするには、どのようにアプリケーションを開発すればよいのでしょうか?

ところで、問題を示すサンプル アプリケーションを次に示します。

https://github.com/paranoiabla/spring-session-issue

4

2 に答える 2