sql >> データベース >  >> NoSQL >> Redis

spring-boot redis:ユーザーのすべてのセッションを無効にする方法は?

    you are following the correct path ユーザーセッションを無効にするため

        usersSessions.forEach((session) -> {        
            sessionRegistry.getSessionInformation(session.getId()).expireNow();
        });
    

    注意事項

    SessionInformation.expireNow()
    

    redisからエントリを削除することを意味するものではありません データベースでは、正しく述べたように、期限切れの属性をセッションに追加するだけです。

    しかし、これによりユーザーのセッションが無効になるのはなぜですか?

    ここで、ConcurrentSessionFilterが機能します。.doFilter() メソッドは、automatically logging outというトリックを実行します

    これがConcurrentSessionFilterのスニペットです

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
    
        HttpSession session = request.getSession(false);
    
        if (session != null) {
            SessionInformation info = sessionRegistry.getSessionInformation(session
                    .getId());
    
            if (info != null) {
                if (info.isExpired()) {
                    // Expired - abort processing
                    doLogout(request, response);
    
                    String targetUrl = determineExpiredUrl(request, info);
    
                    if (targetUrl != null) {
                        redirectStrategy.sendRedirect(request, response, targetUrl);
    
                        return;
                    }
                    else {
                        response.getWriter().print(
                                "This session has been expired (possibly due to multiple concurrent "
                                        + "logins being attempted as the same user).");
                        response.flushBuffer();
                    }
    
                    return;
                }
                else {
                    // Non-expired - update last request date/time
                    sessionRegistry.refreshLastRequest(info.getSessionId());
                }
            }
        }
    
        chain.doFilter(request, response);
    }
    

    よろしくお願いします!



    1. MongoDB C#:IDシリアル化の最良のパターン

    2. Python APIを使用してRedisで複数の要素でsaddを使用するにはどうすればよいですか?

    3. PythonとRedis:マネージャー/ワーカーアプリケーションのベストプラクティス

    4. StackExchange.Redisで基本的なウォッチを行う方法