세션과 쿠키

블랑·2023년 3월 21일
0

세션의 간단한 정의

세션(Session)은 네트워크상에서 클라이언트와 서버간의 통신을 유지하는 기술이다.

  1. 클라이언트(보통은 웹 브라우저)가 서버에 접속하여 요청(request)을 보낸다.
  2. 서버는 이 요청을 처리하고 그 결과를 클라이언트에게 응답(response)한다.
  3. 이 과정에서 서버는 클라이언트와의 상호작용을 유지하기 위해 세션을 생성한다.

세션은 보통 클라이언트와 서버간의 상태 정보를 저장하는 데 사용된다.

예를 들어, 로그인 정보나 쇼핑몰에서 선택한 제품 등의 정보를 세션에 저장하고, 이후에 클라이언트가 서버에 요청을 보낼 때마다 해당 정보를 참조하여 처리할 수 있다.
세션은 일정 시간이 지나면 만료되거나, 클라이언트가 명시적으로 세션을 종료하는 등의 조건에 따라 종료된다.

사용 이유

  1. 클라이언트와 서버간의 통신을 보다 안정적이고 효율적으로 유지할 수 있다.
  2. 보안 측면에서도 중요한 역할을 수행한다.
    예를 들어, 클라이언트가 로그인 정보를 입력한 후에 서버는 이 정보를 세션에 저장하고, 이후에 클라이언트의 요청에 대해 세션 정보를 확인하여 인증 과정을 거친다. 이렇게 하면 로그인 정보가 클라이언트와 서버간의 통신 도중에 노출되는 것을 방지할 수 있다.

Cookie와 세션 - 세부적인 정의

둘 다 상태 유지 관리 기술이다.

Http는 지속적인 자원 낭비를 막기 위해 응답 후 연결이 해제된다. 이를 stateless라고 한다.
하지만 로그인 정보 등과 같이 클라이언트와 서버가 연결 상태를 유지해야 하는 문제가 발생하기 때문에 해당 개념이 등장하였다.

즉, 클라이언트 단위로 상태 정보를 유지해야 하는 경우 쿠키와 세션이 사용된다.

쿠키와 세션의 차이

쿠키 : 사용자 클라이언트에 저장
세션 : 사용자 정보가 서버 쪽에 저장

세션은 서버 자원 내에서 사용할 수 있다. 즉, 서버의 일정 가용치 미만의 정보만 저장할 수 있다.
수강신청 과정에서 접근이 막히거나 다시 시도하라는 이유가 이것 때문이다. 일정한 숫자의 계정 용량만 할당하였기 때문이다.

세션은 서버에서 정보를 저장하기에, 가용 용량에 명확한 한계치가 있다.
누군가 로그인 정보를 유지한다면, 그만큼 서버 내에서 용량을 차지하는 것이다.

JSESSIONID

톰캣 서버에서는 일반적으로 세션의 만료 기한을 30분으로 둔다. 요청이 발생하면 이를 갱신한다.
서버에서는 이걸 어떻게 알까? 각각의 사용자마다 고유한 아이디값을 주고, 요청 발생 시 이를 보내게 한다.

  1. 클라이언트에서 서버로 요청하면, 서버는 해당 클라이언트에게 id를 발급한다.
  2. 이후 클라이언트가 서버로 재요청 시 id값을 서버로 보내야 한다.
  3. 서버 내에서 저장된 id를 기준으로 사용자에 대한 정보들을 임시로 관리한다.

Tomcat Server의 경우 JSESSIONID라는 명칭으로 붙어서 전송된다.

JSESSIONID의 경우 별도의 프로그래밍 없이도 웹 브라우저에서 자동으로 설정되어 전송된다.

반대로 서버에서 보낸 JSESSIONID는 클라이언트 브라우저에서 저장된다. 이를 쿠키를 활용한 세션이라고 한다.

Q. 그러면 쿠키를 활용한 세션은 쿠키와 뭐가 다른가요?
A. 해당 쿠키에는 핵심 정보가 없다. 키값만 존재하고 핵심 정보는 서버에 존재한다. 이 부분이 쿠키와 다르다.

그리고 이런 JSESSIONID의 경우 사용자 클라이언트에 존재할 수도 있기 때문에 탈취되어 악용될 수 있다.

profile
안녕하세요.

0개의 댓글