쿠키(Cookie)와 세션(Session)
2021. 9. 23. 06:28ㆍ네트워크
HTTP 프로토콜의 특징
- 비연결 지향(Connectionless)
- 클라이언트가 request를 서버에 보내고, 서버가 클라이언트에 요청에 맞는 response를 보내면 바로 연결을 끊는다.
- 상태정보 유지 안 함(Stateless)
- 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
HTTP 프로토콜은 모든 요청 간 의존 관계가 없다. -->이전 요청과 현재 요청이 같은 사용자의 요청인지 알기 위해서는 상태를 유지해야 한다.
HTTP 프로토콜에서 상태를 유지하기 위한 기술로 쿠키와 세션이 있다.
쿠키(Cookie)
개념
- 클라이언트 로컬에 저장되는 키와 값이 들어있는 파일이다.
- 이름, 값, 유효 시간, 경로 등을 포함하고 있다.
- 클라이언트의 상태 정보를 브라우저에 저장하여 참조한다.
쿠키 사용 목적
1. 세션 관리(Session Management) - 로그인, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야 할 정보들을 저장한다.
2. 개인화(Personalization) - 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있다.
3. 트래킹(Tracking) - 사용자의 행동과 패턴을 분석하고 기록한다.
구성 요소
- 쿠키의 이름(name)
- 쿠키의 값(value)
- 쿠키의 만료시간(Expires)
- 쿠키를 전송할 도메인 이름(Domain)
- 쿠키를 전송할 경로(Path)
- 보안 연결 여부(Secure)
- HttpOnly 여부(HttpOnly)
동작 방식
- 웹브라우저가 서버에 요청
- 상태를 유지하고 싶은 값을 쿠키(cookie)로 생성
- 서버가 응답할 때 HTTP 헤더(Set-Cookie)에 쿠키를 포함해서 전송
- 전달받은 쿠키는 웹브라우저에서 관리하고 있다가, 다음 요청 때 쿠키를 HTTP 헤더에 넣어서 전송
- 서버에서는 쿠키 정보를 읽어 이전 상태 정보를 확인한 후 응답
쿠키 사용 예
- 아이디, 비밀번호 저장
- 쇼핑몰 장바구니
세션(Session)
개념
- 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지하는 기술이다.
- 웹 브라우저를 통해 서버에 접속한 이후부터 브라우저를 종료할 때까지 유지되는 상태이다.
- 서버는 사용자의 요청이 있을 때, 임시 쿠키 하나를 보내 사용자를 저장 - 즉 세션도 쿠키다
동작 방식
- 웹 브라우저가 서버에 요청
- 서버가 해당 웹브라우저(클라이언트)에 유일한 ID(Session ID)를 부여
- 서버가 응답할 때 HTTP 헤더(Set-Cookie)에 Session ID를 포함해서 전송
쿠키에 Session ID를 JSESSIONID 라는 이름으로 저장Set−Cookie: JSESSIONID=xslei13f - 웹 브라우저는 이후 웹브라우저를 닫기까지 다음 요청 때 부여된 Session ID가 담겨있는 쿠키를 HTTP 헤더에 넣어서 전송Cookie: JSESSIONID=xslei13f
- 서버는 Session ID를 확인하고, 해당 세션에 관련된 정보를 확인한 후 응답
세션 사용 예
- 로그인
쿠키와 세션의 차이점
저장 위치
- 쿠키 : 클라이언트
- 세션 : 서버
보안
- 쿠키 : 클라이언트에 저장되므로 보안에 취약하다. -> 지워지거나 가로채져도 상관없는 정보를 저장
- 세션 : 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 비교적 보안성이 좋다.
라이프사이클
- 쿠키 : 만료 시간에 따라 브라우저를 종료해도 계속해서 남아 있을 수 있다.
- 세션 : 만료 시간을 정할 수 있지만 브라우저가 종료되면 만료 시간에 상관없이 삭제된다.
속도
- 쿠키 : 클라이언트에 저장되어서 서버에 요청 시 빠르다.
- 세션 : 실제 저장된 정보가 서버에 있으므로 서버의 처리가 필요해 쿠키보다 느리다.
출처
https://doooyeon.github.io/2018/09/10/cookie-and-session.html
Computer Networking A Top-down Approach
'네트워크' 카테고리의 다른 글
PDU(Protocol Data Unit)_Frame, Packet, Segment, Datagram (0) | 2021.09.28 |
---|---|
GET메서드 & POST메서드 (0) | 2021.09.21 |
CORS(Cross Origin Resource Sharing) (0) | 2021.09.21 |
HTTP와 HTTPS의 동작과정 (0) | 2021.09.16 |
HTTP 요청/ 응답 Header (0) | 2021.09.15 |