[Web Basic] Cookie, Session
Posted on
Cookie, Session
작년 여름, 급하게 node.js를 배워야 하는 상황에 생활코딩으로 강의를 몰아보다가 얼핏 배우고 넘어갔던 Cookie, Session 개념들을 확실하게 정리해보고자 한다.
우선 쿠키와 세션의 필요성을 알기 위해선 HTTP의 특징들을 짚고 넘어가야 한다.
HTTP의 특징
-
Connectionless (비연결지향성)
- 서버는 클라이언트의 요청을 받아 응답을 한 후 통신 관계를 끊어버리는 특성이 있음.
- 서버와 클라이언트 사이의 접속이 일정하게 유지되어야하는 특정 상황이 존재한다. 이런 케이스때문에 쿠키와 세션이 필요하다.
-
Stateless (상태정보 비유지)
- HTTP 통신은 점속을 끊기 때문에 클라이언트의 상태 정보를 유지하지 않는다.
- 이러한 클라이언트 상태 정보들을 필요로 하는 상황에 쿠키와 세션을 사용하게 된다.
이렇듯 쿠키와 세션은 HTTP 프로토콜의 약점을 보완하는 용도로 사용된다.
Cookie
쿠키란 클라이언트(Browser) 로컬에 저장되는 (키, 값) 쌍이 들어 있는 소규모 데이터 파일이다.
쿠키는 클라이언트 상태 정보를 로컬에 저장하고 참조한다.
Response Header에 set-Cookie 속성을 사용하여 클라이언트에 쿠키를 만들 수 있다.
쿠키는 사용자가 따로 요청하지 않더라도 브라우저 스스로 Request시 Request Header에 쿠키를 첨부하여 서버에 전송한다.
Cookie 동작방식
- 클라이언트는 페이지를 요청
- 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함하여 Response 전달
- 브라우저가 종료되더라도 쿠키 만료기간이 있다면 클라이언트에 계속 보관됨
- 같은 요청 시 HTTP 헤더에 쿠키를 함께 보냄
- 서버는 쿠키 데이터를 업데이트해야되는 경우 요청 때 받은 쿠키 정보를 업데이트하여 Response에 수정된 쿠키 정보를 전송함
< Cookie 동작 예시 >
Cookie 사용 예시
- 방문 사이트에 로그인할 경우, 아이디와 비밀번호를 저장하는 사례
- 쇼핑몰 장바구니 기능
- 자동 로그인, “오늘 더이상 이 창을 보지 않음” 팝업 창
Session
- 세션이란 일정 시간동안 같은 브라우저, 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술을 말함.
- 쉽게 말해 서버에서는 세션id를 보관, 유지하게 되는데 이렇게 되면 클라이언트의 쿠키파일에는 이 세션id가 저장되있음으로써 클라이언트와 서버 사이에 연결 상태를 유지, 기억할 수 있게 되는 기술을 말한다.
Session 동작 방식
- 클라이언트가 서버에 로그인 요청
- 서버는 클라이언트의 요청 유효성을 확인 후 sessionid가 없을 경우 유니크한 id로 생성. (요청항목에 sessionid가 서버에 저장된 sessionid와 일치한 것이 있는 정보라면 지속적으로 통신을 진행함)
- 서버는 응답헤더에 set cookie를 통해 sessionid를 함께 응답함
- 클라이언트는 쿠키 파일에 sessionid를 저장하고 다음 요청시부터 sessionid를 함께 요청항목에 보냄
Cookie, Session의 차이점
cookie와 session은 자칫 그 개념과 차이점들이 헷갈릴 수 있다. 둘의 차이점을 분명히 이해할 필요가 있다.
- cookie는 클라이언트 로컬에 저장되며, 세션은 서버에 저장되고 클라이언트의 쿠키파일에도 저장된다.
- 쿠키는 탈취와 변조가 가능해 보안에 취약할 수 있지만 세션은 ID 값을 가지고 서버에도 저장되어 있기 때문에 상대적으로 보안성이 더 높다.
- 쿠키는 해당 만료기간동안 파일이 유지되지만(만료기간이 끝나지 않았다면, 브라우저가 종료되더라도 유지됨), 세션은 브라우저 종료시 만료 시간과 상관없이 자동 삭제된다.
- 쿠키는 클라이언트의 로컬에 존재하지만 세션은 서버의 추가적인 통신으로 식별하기 때문에 상대적으로 속도가 더 느리다.