728x90
Session 에 담긴 정보 가져오기
- Session 에는 해당 세션의 id, 세션이 살아있을 수 있는 최대 시간, 세션 생성 시간, 마지막 세션 접근 시간 이 있다.
- 각각 아래와 같이 get 메서드로 해당 내용을 가져올 수 있다.
@GetMapping("/session-info")
public String sessionInfo(HttpServletRequest req) {
HttpSession session = req.getSession(false);
if (session == null) {
return "세션이 없습니다";
}
log.info("sessionId = {}", session.getId());
log.info("getMaxInactiveInterval={}", session.getMaxInactiveInterval());
log.info("creationTime={}", new Date(session.getCreationTime()));
log.info("lastAccessTime={}", new Date(session.getLastAccessedTime()));
return "세션출력";
}
Session 타임 아웃 설정
세션의 타임아웃은 왜 필요할까?
- Http 는 기본적으로 비 연결성(ConnectionLess)이라는 특징을 갖는다(서버와 실시간 연결의 의미인듯?) 이 때문에 서버 입장에서는 해당 사용자가 웹 브라우저를 종료한 것인지 아닌지, 세션 정보를 삭제해야하는지 아닌지 알 수 없다. 동시에!! 세션은 서버의 메모리에 저장된다.
- 이 때문에 세션에 대해 타임 아웃 설정이 안되어있어서 세션의 종료(삭제없이) 세션을 서버에서 무한정 보관하는 경우….당연히 어느 순간 메모리 초과가 발생할테고 펑! 터져버린다 —> 야근은 덤
- 또한 해당 유저의 세션을 악의적인 해커가 탈취한 경우 서버쪽에서 세션이 살아있을 때 해당 세션을 통해 악의적으로 접근, 공격이 가능하다.
세션 종료 시점은?
- 그러면 세션 종료 시점을 어떻게 잡아야할까? 아주 단순하게는 세션 생성 시점+30분 혹은 1시간으로 잡으면 된다. 그런데 이렇게하면 중간에 로그아웃 없이 30분동안 열심히 해당 웹 사이트를, 서버를 사용하는 사용자도 30분이 지나면 무조건 로그인을 해야한다는 점이다 ⇒ 열심히 30분동안 게임하다가 강제 로그아웃되어서 로그인의 과정을 거쳐야한다
- 이 때문에 가장 좋은 방법은 가장 최근에 해당 세션에 접근한 시간을 기준으로 30분을 유지(추가) 해주는 것이다. 이러면 사용하는 시간동안 계속 세션이 갱신될 것이고, 이로인해 30분마다 로그인해야하는 번거로움이 사라지게 된다 ⇒ HTTP Session 의 기본 생명 주기
세션 타임 아웃 설정 - SpringBoot 기준 -
- 글로벌 설정의 경우 의 경우 applictionProperties 를 사용한다.
- 모든 세션에 대한 설정 : n초를 적는다 =⇒ 30분 == 1800 초
#Sessions ==> n초를 적으면 된다. 30분 == 1800초
server.servlet.session.timeout=1800
- 특정 세션에 대한 설정
- 세션 생성시 코드로 설정 ⇒ setter 사용
// 세션 생명 시간 설정
session.setMaxInactiveInterval(3600);
'Java - Spring &&n SpringBoot' 카테고리의 다른 글
Spring - 서블릿 필터 다루기(2) : 로그인 여부 체크, 로그인 여부에 따른 페이지 접근 (0) | 2022.08.12 |
---|---|
Spring - 서블릿 필터와 스프링 인터셉터(1) 서블릿필터, 서블릿 필터를 사용한 로그 찍기 (0) | 2022.08.11 |
Spring Boot - 회원가입 시 인증 메일 발송(feat.네이버 이메일 연결) (19) | 2022.08.08 |
SpringBoot 를 사용한 실시간 아이디 중복 검사(feat.ajax, jsp) (6) | 2022.08.04 |
Spring MVC 패턴 && dispatcher (0) | 2022.07.18 |
댓글