Session이란? - accidentlywoo/legacyVue GitHub Wiki

Session이란?

  • 들어가기 전에 이번 시간엔 자바 웹 어플리케이션에서 세션을 사용하는 방법에 대해 알아보도록 하겠습니다.

학습 목표

  1. 세션을 이용하는 방법에 대해 이해합니다.
  2. javax.servlet.http.HttpSession 객체 생성과 중요 메소드에 대해 이해합니다.

핵심 개념

  • 세션(Session)
  • HttpSession

학습하기

세션 정의

*** 정의 ***

  • 클라이언트 별로 서버에 저장되는 정보입니다.

*** 이용 방법 ***

  • 웹 클라이언트가 서버측에 요청을 보내게 되면 서버는 클라이언트를 식별하는 session id를 생성합니다.
  • 서버는 session id를 이용해서 key와 value를 이용한 저장소인 HttpSession을 생성합니다.
  • 서버는 session id를 저장하고 있는 쿠키를 생성하여 클라이언트에 전송합니다.
  • 클라이언트는 서버측에 요청을 보낼때 session id를 가지고 있는 쿠키를 전송합니다.
  • 서버는 쿠키에 있는 session id를 이용해서 그 전 요청에서 생성한 HttpSession을 찾고 사용합니다.

*** 세션 생성 및 얻기 *** HttpSession session = request.getSession(); HttpSession session = request.getSession(true);

  • request의 getSession()메소드는 서버에 생성된 세션이 있다면 세션을 반환하고 없다면 새롭게 세션을 생성하여 반환합니다.
  • 새롭게 생성된 세션인지는 HttpSession이 가지고 있는 isNew()메소드를 통해 알 수 있습니다. HttpSession session = request.getSession(false);
  • request의 getSession()메소드에 파라미터로 false를 전달하면, 이미 생성된 세션이 있다면 반환하고 없으면 null을 반환합니다.

세션에 값 저장

setAttribute(String name, Object value)

  • name과 value의 쌍으로 객체 Object를 저장하는 메소드입니다.
  • 세션이 유지되는 동안 저장할 자료를 저장합니다. session.setAttribute(이름, 값)

세션에 값 조회

getAttribute(String name) 메소드

  • 세션에 저장된 자료는 다시 getAttribute(String name)메소드를 이용해 조회합니다.
  • 반환 값은 Object 유형이므로 저장된 객체로 자료유형 변환이 필요합니다.
  • 메소드 setAttribute()에 이용한 name인 "id"를 알고 있다면 바로 다음과 같이 바로 조회합니다. String value = (String) session.getAttribute("id");

세션에 값 삭제

  • removeAttribute(String name) 메소드 -- name값에 해당하는 세션 정보를 삭제합니다.
  • invalidate() 메소드 -- 모든 세션 정보를 삭제합니다.

javax.servlet.http.HttpSession

javax.servlet.http.HttpSession

javax.servlet.http.HttpSession

*** 세션은 클라이언트가 서버에 접속하는 순간 생성 ***

  • 특별히 지정하지 않으면 세션의 유지 시간은 기본 값으로 30분 설정합니다.
  • 세션의 유지 시간이란 서버에 접속한 후 서버에 요청을 하지 않는 최대 시간입니다.
  • 30분 이상 서버에 전혀 반응을 보이지 않으면 세션이 자동으로 끊어집니다.
  • 이 세션 유지 시간은 web.xml파일에서 설정 가능합니다.

<session-config> <session-timeout>30</session-timeout> </session-config>​

생각해보기

  1. 쿠키는 이름과 값이 모두 문자열이지만, 세션의 키값은 문자열이고 값은 객체를 저장할 수 있습니다. 왜 이런 차이가 있을까요?