하루에 한 문제

Cookie & Session 본문

CS/네트워크

Cookie & Session

dkwjdi 2021. 3. 30. 01:31

HTTP

  • 비연결지향(Connectionless) - 클라이언트가 요청을 서버에 보내면 서버는 클라이언트 응답을 하면서 접속을 끊음
  • 상태정보유지x(Stateless) - 접속을 끝내는 순간 클라이언트와 서버의 통신은 끝나고 상태 정보를 유지하지 않음

HTTP는 비상태성 프로토콜이기 때문에 상태 정보를 유지하지 않습니다.

연결을 유지하지 않기 때문에 리소스의 낭비가 줄어드는 것은 장점이지만

매번 통신할 대마다 연결 설정을 해야하는 단점이 존재합니다.

또한 이전 요청과 현재 요청이 같은 사용자의 요청인지 알 수 없는 단점이 존재합니다!

 

이 때 쿠키와 세션을 통해서 HTTPStateless한 문제를 해결할 수 있습니다.

 

쿠키

-쿠키는 클라이언트 로컬에 저장되는 키, 값이 들어있는 데이터 파일입니다.

-쿠키는 이름, 값, 만료날짜, 경로정보가 들어있습니다.

-쿠키는 일정 시간 동안 데이터를 저장할 수 있어 로그인 상태를 유지합니다.

-쿠키는 클라이언트의 상태 정보를 본인 하드디스크에 저장하였다 필요할 때 참조 및 사용 합니다.

 

1. 원리

-브라우저에서 웹페이지 접속 (클라이언트)

-웹 서버는 쿠키를 생성

-클라이언트가 요청한 웹 페이지를 받으며 쿠키를 클라이언트 로컬에 저장 

-클라이언트가 재 요청시 웹 페이지 요청과 쿠키를 함께 전송 

-동일 사이트 재방문 시 클라이언트 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함게 쿠키를 전송

 

2. 사용사례

-방문한 웹 페이지에 "아이디 비밀번호 저장하시겠습니까?" 라고 나타나는 것은 쿠키로 저장할지 물어보는 것

-팝업창에서 "오늘 이창을 다시보지 않기"

-쇼핑몰 장바구니

 

 

세션

-세션은 클라이언트와 우베 서버 간의 네트워크 연결이 지속적으로 유지되고 있는 상태를 말합니다.

-사용자가 브라우저를 열어 서버에 접속한 뒤, 접속을 종료할 때 까지 유지

-웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장

-브라우저를 닫거나 서버에서 세션을 삭제하면 삭제되기 때문에 쿠키보다 비교적 보안이 뛰어나다

-서버 용량이 허용하는 한 저장데이터에 제한이 없다.

-각 클라이언트 고유 Session ID를 부여한다.(Session ID로 클라이언트를 구분해 서비스 제공)

 

 

1.원리

-클라이언트가 페이지 요청 

-서버는 접근한 클라이언트의 Request-Header필드인 Cookie를 확인해, 클라이언트가 해당 session-id를 보냈는지 확인

-session-id가 존재하지 않는다면 서버는 session-id를 생성해 클라이언트에게 돌려준다.

-서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장한다 (쿠키이름 : JSESSIONID )

-클라리언트는 재접속 시, 이 쿠키(JSESSIONID)를 이용하여 session-id값을 서버에 전달지향

 

2. 사용사례

-로그인 정보유지

 

 

저장 위치

  • 쿠키 : 클라이언트의 웹 브라우저가 지정하는 메모리 or 하드 디스크
  • 세션 : 서버의 메모리

만료 시점

  • 쿠키 : 저장시, expires속성을 정의하여 무효화 시키면 삭제될 날짜를 지정 가능
  • 세션 : 클라이언트가 로그아웃하거나 설정 시간동안 반응이 없으면 무효화

리소스

  • 쿠키 : 클라이언트에 저장되고 클라이언트의 메모리를 사용하기 때문에 서버자원 활용x
  • 세션 : 서버에 저장되고, 서버 메모리로 로딩되기 때문에 세션이 생길 때마다 리소스 차지

용량 제한

  • 쿠키 : 클라이언트도 모르게 접속되는 사이트에 의해 설정될 수 있기 때문에 쿠키로 인해 문제가 발생하는 걸 막고자 클라이언트에 총 300개 쿠키저장가능하고, 한 도메인당 20개, 하나의 쿠키당 4KB로 제한되어있음
  • 세션 : 클라이언트가 접속하면 서버에 의해 생성되므로 개수나 용량에 제한이 없다.
  • 쿠키 값이 20개를 초과하면 가장 적게 사용된 쿠키부터 지워집니다.

보안

  • 쿠키 : 클라이언트에 저장되기 때문에 보안에 취약
  • 세션 : 서버에 저장하기 때문에 쿠키에 비해서는 보안이 우수하다.
  • 결과적으로 둘 다 보안에 약하다고 할 수있다.

 

참고

jeong-pro.tistory.com/80

hahahoho5915.tistory.com/32

toma0912.tistory.com/67

github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/Cookie_Session.md

 

 

 

'CS > 네트워크' 카테고리의 다른 글

주소창에 naver.com을 치면 일어나는 일  (1) 2021.03.31
UDP  (1) 2021.03.31
TCP ( 흐름 제어, 오류 제어)  (0) 2021.03.31
OSI 7계층 & TCP/IP 4계층  (0) 2021.03.31
TCP 3 Way-Handshake & 4 Way-Handshake  (0) 2021.03.30
Comments