서론
이번 글도 이전 글인 쿠키글과 마찬가지로 나 혼자 공부를 위해 작성하는것이니 지저분한 정리가 될 수 있다. 추 후 깔끔하게 정리를 꼭 해보도록 하겠다 :()
세션이란?
사용자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점까지 같은 사용자로부터 오는 일련의 요청을 하나의 상태로 보고 그 상태를 일정하게 유지하는 기술이다.
---> 클라이언트 별로 각각의 상태 정보를 서버에서 저장하는 기술이다.
세션 특징
- Browser마다 개별 저장소(Session객체)를 서버에서 제공(발급)한다.
- 각 클라이언트에게 고유한 ID를 부여한다.
- 웹서버에 컨테이너 상태를 유지하기 위한 정보를 저장한다.
- 세션 ID로 클라이언트를 구분하여 클라이언트 요구에 맞는 서비스를 제공한다.
- 사용했던 정보들을 서버에 저장하기 때문에 쿠키보다 보안성이 더 우수하다.
- 서버에 저장되기때문에 서버 부하가 발생한다.
- Http 프로토콜은 비접속형 프로토콜이라서 매 접속마다 새로운 네트워크 연결이 이뤄지는데, 세션이 연결 유지를 가능하게 해준다.
세션 동작 순서
- 클라이언트가 페이지를 요청
- 서버는 해당 클라이언트의 RequsetHeader에서 Cookie를 확인하여 클라이언트가 해당 SessionID를 보냈는지 확인
- 만약 SessionID가 존재하지 않으면 서버는 SessionID를 생성하여 클라이언트에게 전달
- 서버에서 클라이언트에게 전달한 SessionID를 쿠키를 사용하여 서버에 저장 (JSessionID)
- 클라이언트 재 접속 시 쿠키세션(JSessionID)를 이용하여 sessionID값을 서버에게 전달 (3번 작업 실행)
세션 및 관련 메서드 정리
세션 설정(발급) 방법
HttpSession session = request.getSession(); //request -> HttpServletRequest
session.setAttribute("id",id); //key, value 형태로 설정
세션 삭제 2가지 방법 (수동 or 자동)
// 수동 종료
HttpSession session = request.getSession(); //request -> HttpServletRequest
session.invalidate(); // 1. 세션을 즉시 종료
session.setMaxInactiveInterval(30 * 60) // 2. 예약 종료 (30분 후)
// 자동 종료 --> web.xml 에서 설정
<session-config>
<session-timeout>30</session-timeout>
</session-config>
세션 사용하지 않는 방법
<%@ page session = "false" %>
세션은 페이지 요청이 오면 항상 생성되기 때문에 세션이 필요하지 않는 페이지의 경우에는 위의 소스를 맨 위쪽에 추가하여 session생성을 안할 수 있다.
위 처럼 하는 이유는 위의 특징에서 보았듯 세션이 많을 수록 서버에 부하가 생기기 때문에 최대한 사용하지 않게 하기 위함이다.
반응형
'Programming > Spring' 카테고리의 다른 글
[Spring] 전역 예외 처리 방법 (@ControllerAdvice, @ExceptionHandler) (0) | 2022.03.13 |
---|---|
[Spring] 쿠키와 세션의 차이점 (0) | 2022.03.13 |
[Spring] 쿠키(Cookie)란? (개념 / 특징 / 사용법) (0) | 2022.03.12 |
[Servlet] 서블릿 실행 시간 측정 필터 만들기 (Servlet Performance Time Check Filter) (0) | 2022.02.01 |
[IntelliJ] Community에서 Spring Initializr 설정하는 방법 (0) | 2022.01.16 |
댓글