세션 정보를 위한 컨트롤러

@Slf4j
@RestController
public class SessionInfoController {
    @GetMapping("/session-info")
    public String sessionInfo(HttpServletRequest request){
        HttpSession session = request.getSession(false);
        if(session == null){
            return "세션이 없습니다.";
        }

        //세션 데이터 출력
        session.getAttributeNames().asIterator()
                .forEachRemaining(name -> log.info("session name={}, value={}", name, session.getAttribute(name)));
        log.info("sessionId={}", session.getId());
        log.info("getMaxInactiveInterval={}", session.getMaxInactiveInterval());
        log.info("creationTime={}", new Date(session.getCreationTime()));
        log.info("lastAccessedTime={}", new Date(session.getLastAccessedTime()));
        log.info("isNew={}", session.isNew());

        return "세션 출력";
    }

}

세션의 타임아웃 설정

세션은 사용자가 로그아웃을 직접 호출해서 session.invalidate() 호출 되는 경우에 삭제됩니다.

대부분의 사용자는 로그아웃을 선택하지 않고, 웹 브라우저를 종료합니다. HTTP가 비연결성 이므로 사용자가 웹 브라우저를 종료한 것인지 인식할 수 없습니다.

남아있는 세션을 무한정 보관하면 다음과 같은 문제점이 생깁니다.

세션의 종료시점

  1. 세션 생성 시점으로부터 30분 정도로 잡으면 될 것 같습니다. 하지만 30분마다 세션이 삭제되기 때문에 사이트를 돌아다니다가 다시 세션을 생성해야됩니다.