유쨈미 2024. 5. 31. 09:38

1. Session

세션(Session)은 웹 애플리케이션에서 클라이언트와 서버 간의 상태를 유지하기 위한 방법이다.
HTTP는 무상태 프로토콜이기 때문에, 클라이언트와 서버 간의 상태를 유지하려면 별도의 메커니즘이 필요하다.
세션은 이러한 상태 유지를 가능하게 한다.
클라이언트가 HTTP요청을 보낼 때 쿠키에 세션 ID가 없다면 서버는 세션 ID를 생성해 쿠키에 담아서 돌려준다.
다시 HTTP 재요청을 할 때 쿠키를 보내기 때문에 서버에서는 세션 ID를 통해 클라이언트를 식별할 수 있다.

 

💻 Session 작동 원리

  1. 세션 생성
    클라이언트가 웹 애플리케이션에 처음 요청을 보낼 때, 서버는 고유한 세션 ID를 생성하고
    이를 클라이언트에게 응답 헤더 또는 쿠키를 통해 전달한다.
  2. 세션 저장
    서버는 세션 ID와 함께 관련된 데이터를 서버 측 저장소(메모리, 데이터베이스 등)에 저장한다.
    이 데이터는 세션 객체에 저장된다.
  3. 세션 유지
    클라이언트는 이후의 요청마다 세션 ID를 서버에 전송한다.
    서버는 세션 ID를 통해 해당 클라이언트의 세션 데이터를 찾아 처리한다.
  4. 세션 만료
    세션은 일정 시간이 지나면 만료되며, 사용자가 로그아웃하거나 서버가 재시작될 때도 만료될 수 있다.

 

💡 세션의 특징

  1. 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
  2. 웹 서버에 저장되는 쿠키(세션 쿠키 / session cookie)이다.
  3. 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되기 때문에 쿠키보다 비교적 보안적으로 우수하다.
  4. 저장 데이터에 제한이 없다.(서버 용량 허용 범위 내에서)
  5. 각 클라이언트에 고유 세션 ID(Session ID)를 부여한다.
    (중복 X) 세션 ID를 통해 클라이언트를 구분하여 각 요구에 맞는 서비스를 제공한다.

 

💡 Session의 장점

  1. 보안성
    세션 데이터는 서버에 저장되므로 클라이언트가 직접 접근할 수 없다.
    따라서 민감한 데이터를 저장하기에 적합하다.
  2. 상태 유지
    세션을 사용하면 사용자의 상태를 유지할 수 있어 사용자 맞춤형 경험을 제공할 수 있다.

 

💻 Session 사용 예시 코드 (Java Servlet)

 

1️⃣ Session 생성 및 데이터 저장

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    session.setAttribute("username", "john_doe");
    response.getWriter().println("Session created and username set.");
}

 

2️⃣ Session 데이터 읽기

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
    if (session != null) {
        String username = (String) session.getAttribute("username");
        response.getWriter().println("Username: " + username);
    } else {
        response.getWriter().println("No session found.");
    }
}

 

3️⃣ Session 무효화

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
    if (session != null) {
        session.invalidate();
        response.getWriter().println("Session invalidated.");
    } else {
        response.getWriter().println("No session found.");
    }
}

 

🚀 Cookie와 Session비교

항목 쿠키(Cookie) 세션(Session)
저장 위치 클라이언트 측 (브라우저) 서버 측
보안성 낮음
(클라이언트가 쿠키를 수정할 수 있음)
높음
(데이터가 서버에 저장됨)
데이터 저장량 제한적
(브라우저마다 크기 제한 존재)
무제한
(서버의 저장소 크기에 따름)
유효 기간 쿠키 설정에 따라 다름
(특정 기간 동안 유지 가능)
세션 설정에 따라 다름
(일반적으로 브라우저 종료 시 만료)
사용 용도 로그인 상태 유지, 사용자 선호 설정 등 사용자 인증, 쇼핑 카트, 사용자 상태 유지 등
서버 부하 없음
(데이터가 클라이언트에 저장됨)
있음
(데이터가 서버에 저장됨)
전송 방법 HTTP 헤더를 통해 자동 전송 Session ID를 쿠키 또는 URL 파라미터를 통해 전송
주요 메소드 setMaxAge(), getValue(), setValue() 등 getSession(), setAttribute(), getAttribute() 등

 

 

[서블릿/JSP] 세션(session)의 마지막 접근시간 및 유효시간에 대해

참고글 [서블릿/JSP] 세션(Session)이란? 세션 생성하는 방법 및 세션 객체 설명 [서블릿/JSP] 세션(session)을 명시적으로 종료시키는 방법 세션의 자동 종료 세션은 지정한 유효시간만큼 접근하지 않

dololak.tistory.com

- 출처 : dololak