쿠키와 세션 (cookie & session)

썩은요플렛's avatar
Aug 12, 2024
쿠키와 세션 (cookie & session)
 

쿠키

 
  • 사용자의 브라우저에 저장되는 작은 데이터 파일. 주로 사용자 식별, 세션 상태 유지, 사용자 설정 저장 등에 사용됨
  • 브라우저에 저장된다.
  • 서버가 브라우저(클라이언트)에 쿠키를 설정하고, 브라우저는 이후 모든 요청을 쿠키에 포함시켜 전송한다
  • 즉 사용자가 웹사이트에 로그인을 하면, 사용자 ID를 쿠키저장, 이후 사용자가 페이지를 이동할 때마다 브라우저는 이 쿠키를 서버에 전송해 사용자를 식별함.
  • 쿠키에 만료 날짜를 설정할 수 있다. 만료가 되면 자동으로 쿠키는 삭제된다. 만약 날짜가 설정되지 않았다면 세션이 종료될 때까지 유지됨.
 

세션

 
  • 세션은 서버 측에서 사용자의 상태와 데이터를 저장하는 방법. 로그인 상태 유지, 사용자 정보 저장에 사용됨.
  • 서버에 저장됨, 세션 식별자(Sesssion ID)만 브라우저에 쿠키로 저장되어 서버에 저장된다.
  • 사용자가 웹사이트에 접속하면 서버는 고유의 Session ID를 생성하고 이를 브라우저에 저장함.
  • 이후 브라우저는 요청을 보낼 때마다 이 Session ID를 서버로 전송하고, 서버는 이 Session ID를 이용해 사용자의 상태를 확인하고 유지.
  • 세션은 서버에서 관리되므로 브라우저가 세션 데이터를 직접 수정은 불가
 

쿠키와 세션의 차이점

 
  • 저장 위치: 쿠키브라우저에 저장되고, 세션서버에 저장된다.
  • 보안: 세션이 더 보안성이 높음, 쿠키는 키는 클라이언트에서 접근하고 수정 가능하지만, 세션 데이터는 서버에 저장되어 브라우저가 직접 접근 불가.
  • 유지 기간: 쿠키만료 날자를 설정 가능하지만, 세션은 기본적으로 브라우저가 닫힐 때까지 유지.
 
 
notion image
 
  • 세션에 접근할 수있게 하는 코드
 
# 세션 접근하는 법 spring: mustache: servlet: expose-session-attributes: true expose-request-attributes: true
 
notion image
 
notion image
 
매 요청 시 마다 구분값으로 쓰기 위해 쿠키가 요청마다 전달되는데. 이 쿠키는 서버에 의해 응답으로 브라우저에 저장된다
예를 들어 사용자가 로그인페이지에서 로그인을 하면 서버는 응답에 set-cookie 를 특정 쿠키네임으로 사용자 정보를 담아 준다.
그 다음 사용자의 요청부터는 이 쿠키 정보가 담겨 요청되는데. 사용자 정보가 있기 때문에 , 서버는 HttpRequest 정보로 이 요청이 로그인 한 A 라는 사용자의 요청이라는 것을 알 수 있다.
하지만, 로그인 이후에 사용자 정보를 쿠키에 담아 놓고 사용한다면, 클라이언트의 쿠키 정보는 쉽게 변조, 탈취가 가능하기 때문에 보안 문제가 발생할수 있다.
때문에 서버에서 세션에 사용자 정보를 저장하도록 하여 이러한 문제를 해결할 수 있다.
일반적으로 세션키와 세션정보는 브라우저가 서버에 접근만해도 생성된다.
Http Request 에 의한 session생성 및 Response 의 session cookie 전달 이 이루어지고
그 다음부터 이루어지는 Request 부터는 같이 전달되는 session cookie 를 이용하여 서버에서 사용자 세션을 구분할 수 있다.
 
 
Share article

RottenYogurt's Development Blog