세션 정보 확인
@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 "세션 출력";
}
}
먼저, getSession(false)로 받아와 있으면 세션을 뽑아오고, 없으면 null이 반환됨.
session.getAttributeNames()해서 세션의 모든 key 받아올 수 있음.
그 콜렉션 이터레이터로 바꿔서 forEach로 돌려 봄.
session.getAttribute(key) 해서 함께 출력해 봄.
이러면 그 key로 넣어 둔 객체를 출력해 줌.
sessionId는 그 우리가 처음에 UUID로 썼었던 경험이 있는 그거와 비슷한 기능을 하는 임의의 문자열임. session에서 알아서 자동으로 만들어 줌. 세션 생성할 때.
getMaxInactiveInterval은 최대 비활성 시간. 을 얻어오는건데 왜 MaxActiveInterval이 아니지? 직역하면 최대 비활성 시간인데. 최대 활성시간이 맞지 않나? 여튼 초 단위로 얼마 뒤에 비활성화(아마 invalidate()될려나?) 되는 지 알려줌.
1800 나오는 거 보니 기본이 30분이고, 접근 할 때마다 다시 30분으로 갱신되는 듯?
creationTime()은 세션 생성 시간,
lastAccessedTime()은 마지막 접근 시간,
isNew()는 지금 막 만든건지. boolean을 반환.
isNew() 판단은 request 수명이 아닐까 함.
앞으로 할 일은 타임아웃을 설정할 일인데,
아마 lastAccessedTime()과 getMaxInactiveInterval 이게 관계가 있을 듯.
.. 엄청 간단 함.
아니 간단하다기 보다는. 스프링에서 알아서 제공해 줌.
어떻게 하냐면, 그냥 application.properties에
server.servlet.session.timeout=1800
이렇게 해주면 된다고 함.
서버의 세션 타임아웃은 1800초. 라고
글로벌 설정은 분 단위로 해야 한다고 하는데(60초, 120초 등)
분마다 검사하나 봄.. 결국 누군가는 검사를 해야 하고 매초 할 수는 없는 일 이니까.
여튼 아까 말 했던데로 기본값은 1800초, 30분이고, 세션에 접근할 때마다 갱신됨.
세션은 기본적으로 서버의 메모리를 이용한다. 그러므로 정말정말 최소한의 정보만 담아야 한다.
id 등 우리가 멤버 저장소로부터 멤버를 가져올 수 있는 최소한의 정보만 가지고 있어야 하는 듯 하다.
이 세션을 DB에 저장하는 방법도 있다고 한다. 아마 나중에 이걸로 할 것 같다. 서버 메모리에 무언가 저장하는 것은 너무 비효율 적이다.
우리 서버 개발자가 해야 할 역할은 DB와 사용자의 연결을 해주는 일이다.
서버의 메모리는 마치 프린터 처럼, 할 일을 끝내면 비워버려야 한다. 뭘 담아두면 안된다.
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
55. 필터 구현 (0) | 2023.09.09 |
---|---|
54. 필터, 인터셉터 (0) | 2023.09.08 |
52. 스프링 세션 업그레이드 (0) | 2023.09.07 |
51. 스프링의 Http 세션 (0) | 2023.09.07 |
50. 서버세션 적용 (0) | 2023.09.06 |