HTTP의 비연결지향(Connectionless)과 비상태정보유지(Stateless)을 보완하여 서버가 클라이언트를 식별하게 해주는 것이 쿠키와 세션
쿠키는 서버가 사용자의 웹 브라우저에 저장하는 작은 데이터
쿠키의 데이터 형태는 Key-Value로 구성
만료 시간이 포함되어 있어 일정 시간 동안만 데이터 저장 가능
(만료시간을 설정하여 브라우저가 종료되어도 유지되도록 할 수 있음)
브라우저마다 저장되는 쿠키는 다르다 (브라우저가 다르면 다른 사용자로 인식)
클라이언트에서 서버에 요청을 보낸다.
서버는 쿠키를 생성하여 클라이언트에게 응답한다.
클라이언트는 쿠키를 받아서 저장
클라이언트가 다시 쿠키를 담아 서버에 요청을 보낸다.
서버는 쿠키를 통해 상태를 식별하고 그에 따른 응답을 한다.
ID 저장, 로그인 상태 유지, 일주인간 다시 보지 않기, 최근 검색한 상품들을 광고에서 추천
세션 ID는 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장되며 브라우저 종료시 소멸
기본적으로 쿠키 사용(세션 ID-JSESSIONID-만 쿠키로 저장, 세션 ID로 서버에 저장)
세션ID를 제외한 나머지 상태 데이터들이 서버에 저장되므로 쿠키보다 보안성 높음
기본적으로 브라우저가 종료되면 소멸
클라이언트가 서버에 요청을 보낸다.
서버는 세션 생성 및 세션ID를 응답한다.
클라이언트가 세션ID가 포함되어 있는 쿠키를 담아 요청을 보낸다.
서버에서 쿠키의 세션ID를 통해 클라이언트 식별 및 세션의 데이터를 통한 응답을 한다.
아이디, 닉네임 등의 정보를 세션에 담아두면 요청이 있을 때 마다, DB에 접근할 필요가 없어서 효율적
로그인 후 화면 이동시에도 로그인 유지
상태데이터를 서버에서 가지고 있는 만큼 부하가 늘어난다.
세션ID를 통해 세션을 읽어온 다음 데이터를 읽어야하기때문에 쿠키에 비해 상대적으로 느리다.
session.setAttribute("id", "value");
session.getAttribute("id");
session.invalidate();
Cookie | Session | |
---|---|---|
저장위치 | 클라이언트 | 서버 |
저장형식 | String | Object |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량제한 | 도메인당 20개, 1쿠키당 4KB | 서버가 허용하는 한 제한 없음 |
보안 | 세션보다 취약 | 쿠키보다 좋음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
만료시점 | 쿠키 저장시 설정 | 알 수 없음 |