[네트워크] 쿠키(Cookie)와 세션(Session)

Gavin Ariel Lee·2021년 8월 23일
0

HTTP의 비연결지향(Connectionless)과 비상태정보유지(Stateless)을 보완하여 서버가 클라이언트를 식별하게 해주는 것이 쿠키와 세션

Cookie

쿠키는 서버가 사용자의 웹 브라우저에 저장하는 작은 데이터
쿠키의 데이터 형태는 Key-Value로 구성
만료 시간이 포함되어 있어 일정 시간 동안만 데이터 저장 가능
(만료시간을 설정하여 브라우저가 종료되어도 유지되도록 할 수 있음)
브라우저마다 저장되는 쿠키는 다르다 (브라우저가 다르면 다른 사용자로 인식)

동작 순서

클라이언트에서 서버에 요청을 보낸다.
서버는 쿠키를 생성하여 클라이언트에게 응답한다.
클라이언트는 쿠키를 받아서 저장
클라이언트가 다시 쿠키를 담아 서버에 요청을 보낸다.
서버는 쿠키를 통해 상태를 식별하고 그에 따른 응답을 한다.

사용 예시

ID 저장, 로그인 상태 유지, 일주인간 다시 보지 않기, 최근 검색한 상품들을 광고에서 추천

단점

  • 방문했던 웹 사이트에 대한 정보 및 개인정보가 기록
    -> 사생활 침해 소지가 있음(해소하기 위해 웹 브라우저 자체에 쿠키 거부 기능이 있음)
  • 서버가 가지고 있는 것이 아니라 사용자에게 저장되기 때문에 임의로 고치거나 지울 수 있으며 가로채기도 쉬워 보안이 취약(민감한 정보를 담는 것 위험)

Session

세션 ID는 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장되며 브라우저 종료시 소멸
기본적으로 쿠키 사용(세션 ID-JSESSIONID-만 쿠키로 저장, 세션 ID로 서버에 저장)
세션ID를 제외한 나머지 상태 데이터들이 서버에 저장되므로 쿠키보다 보안성 높음
기본적으로 브라우저가 종료되면 소멸

동작 순서

클라이언트가 서버에 요청을 보낸다.
서버는 세션 생성 및 세션ID를 응답한다.
클라이언트가 세션ID가 포함되어 있는 쿠키를 담아 요청을 보낸다.
서버에서 쿠키의 세션ID를 통해 클라이언트 식별 및 세션의 데이터를 통한 응답을 한다.

아이디, 닉네임 등의 정보를 세션에 담아두면 요청이 있을 때 마다, DB에 접근할 필요가 없어서 효율적

사용 예시

로그인 후 화면 이동시에도 로그인 유지

단점

상태데이터를 서버에서 가지고 있는 만큼 부하가 늘어난다.
세션ID를 통해 세션을 읽어온 다음 데이터를 읽어야하기때문에 쿠키에 비해 상대적으로 느리다.

세션 사용

session.setAttribute("id", "value");
session.getAttribute("id");
session.invalidate();

Cookie와 Session 비교

CookieSession
저장위치클라이언트서버
저장형식StringObject
리소스클라이언트의 리소스서버의 리소스
용량제한도메인당 20개, 1쿠키당 4KB서버가 허용하는 한 제한 없음
보안세션보다 취약쿠키보다 좋음
속도세션보다 빠름쿠키보다 느림
만료시점쿠키 저장시 설정알 수 없음
profile
As you wish

0개의 댓글