본문 바로가기

개발에 도움이 되는/Network

쿠키(Cookie), 세션(Session)

 

- 쿠키와 세션의 사용 이유 : HTTP의 특징 중 Connectionless에 의해 통신할 때마다 새로 연결을 해줘야 하고 Stateless에 의해 상태 정보가 유지되지 않는 특성이 있음. 이 특성들을 단점을 보완하기 위해 사용하며, 쿠키와 세션 덕분에 어떤 페이지에서 다른 페이지로 넘어가도 인증이 그대로 유지됨.

 

- 쿠키 (Cookie) : 클라이언트 로컬에 저장되는 Key-Value쌍이 들어있는 작은 데이터 파일

 - 특징

   1. 클라이언트의 상태 정보를 로컬에 저장했다가 요청할 때 참조

   2. 클라이언트에 300개까지 쿠키 저장이 가능함. 하나의 도메인당 20개의 값만 가지며, 하나의 쿠키 값은 4KB까지 저장 가능

   3. 쿠키는 이름(쿠키를 구별하기 위한 이름), 값(쿠키의 이름과 관련된 값), 만료 날짜/시간(쿠키의 유지 시간), 도메인(쿠키를 전송할 도메인), 경로(쿠키를 전송할 요청 경로) 등을 가지고 있음

   4. 쿠키의 만료 기간 Default는 클라이언트를 종료하면 사라진다.

 

- 쿠키 종류 :

  1. 세션 쿠키 (Session Cookie) : 만료 날짜/시간을 지정하는 쿠키, 지정하더라도 브라우저 메모리에 저장되기 때문에 브라우저가 종료되면 쿠키는 사라짐, 비교적 보안 관리에 유리

  2. 지속 쿠키 (Persistent Cookie) : 만료 날짜/시간을 지정하지 않은 쿠키 (항상 유지하라는 것으로 판단), 로컬에 파일로 저장되기 때문에 종료되어도 쿠키는 남아있음, 비교적 보안에 취약

 

- 동작 방식

  1. 클라이언트가 페이지 요청

  2. 서버에서 쿠키를 생성하고 HTTP Header에 쿠키를 포함하여 응답

  3. 브라우저가 종료되어도 쿠키 만료 기간이 남아있다면 클라이언트에 보관

  4. 동일한 도메인의 다음 요청부터는 쿠키와 함께 보냄

  5. 서버는 쿠키 상태 정보를 알고 있고 정보 변경이 있다면 쿠키를 업데이트하여 다시 변경된 쿠키를 포함하여 응답

 

- 사용 예 : 쇼핑몰 장바구니 같은 보안에 중요하지 않은 정보


- 세션 (Session) : 보안이 취약한 쿠키의 한계점을 극복하기 위해 사용, 쿠키를 기반으로 하여 동작하지만 쿠키와는 다르게 클라이언트가 아닌 서버에 저장되고 관리함

 

 - 특징

   1. 서버에서 클라이언트를 구분하기 위해 Session ID를 부여하며, 클라이언트가 종료될 때까지 인증 상태를 유지

   2. 클라이언트 정보를 서버에 두기 때문에 쿠키보다 보안이 좋음

   3. 서버 메모리에 저장해놓기 때문에 클라이언트 수가 많아지면 서버에 과부하를 주고 성능 저하의 요인이 됨

   4. Session ID, Session 생성 시간, Session 최근 접근 시간으로 구성되어 있음

   5. Session은 만료 기간을 설정할 수 있고 WAS(Web Application Server)에 의해 관리됨

  

 

 - 동작 방식

   1. 클라이언트가 서버에 요청

   2. 서버에서 세션 설정 여부에 따라 세션 ID를 응답 Header의 Set-Cookie에 포함하여 전송

   3. 클라이언트는 이후 동일한 도메인에 요청 시 세션 ID가 있는 해당 쿠키를 Header에 포함하여 서버에 전송

   4. 서버는 세션 ID를 받아서 세션 ID로 세션에 있는 클라이언트 정보를 가져와서 사용

   5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답

   6. 세션은 만료 기간이 지나거나 세션 쿠키를 사용하는 경우에는 클라이언트를 종료하면 사라진다. 

 

 

- 사용 예 : 유져 정보 같은 보안상 중요한 작업 시 사용

 

- 쿠키와 세션의 차이 정리

 

반응형