@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가 비연결성 이므로 사용자가 웹 브라우저를 종료한 것인지 인식할 수 없습니다.
남아있는 세션을 무한정 보관하면 다음과 같은 문제점이 생깁니다.