세션(Session)이란?
웹사이트에 클라이언트(사용자) 요청을 유지하게 하기위해 웹서버에 정보를 저장하는 방법
브라우저 종료시(서버와의 연결종료) 까지 세션
-> 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 한다.
쿠키(Cookie)란?
웹사이트에 접속할때 클라이언트(사용자) 로컬에 저장되는 key-value쌍의 데이터 파일
사용 예시
- ID 저장, 로그인 상태 유지
- 일주일간 다시 보지 않기.
- 최근 검색한 상품들을 광고에서 추천
- 장바구니 기능
그럼 왜 쿠키와 세션을 이용할까?
이는 HTTP통신의 특징떄문이다.
HTTP통신의 특징
Connectionless(비연결 지향)
클라이언트에서 서버에 요청(Request)을 보내면 서버는 클라이언트에 응답(Response)을 하고 접속을 끊는다.
Stateless(상태정보 유지안함)
요청에 응답후 접속을 끊기 떄문에 클라이언트의 상태 정보를 서버는 가지지않는다.
-> 하지만 로그인,사용자정보 등의 데이터 유지가 필요한 경우가 발생!
이를 해결하기위해 쿠키와 세션을 사용한다.
쿠키와 세션의 동작방식
클라이언트 로그인 요청
로그인 확인 후 서버는 세션id를 서버에 저장. 세션id를 set-cookie: 를 통해 쿠키 응답
요청한 그외 데이터에 대해서도 서버에서 set-cookie: 를 이용해 쿠키를 추가하여 응답
클라이언트는 이후에 요청 시 해당 쿠키를 요청헤더에 추가하여 요청.
세션id에 맞는 정보를 제공
쿠키와 세션의 차이점
저장위치
쿠키는 로컬에, 세션은 로컬과 웹서버에 저장된다.
보안
쿠키는 탈취와 변조가 가능하지만, 세션은 ID값만 가지고 있고 서버에도 저장이 되어있기 때문에 상대적으로 안전하다.
Lifecycle
쿠키는 브라우저를 종료해도 파일로 남아있지만, 세션은 브라우저 종료시 세션을 삭제한다.
속도
쿠키는 파일에서 읽기 때문에 상대적으로 빠르고, 세션은 요청마다 서버에서 처리를 해야하기 때문에 비교적 느리다.
Cookie | Session | |
저장위치 | 클라이언트 | 서버 |
저장형식 | text | Object |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량제한 | 도메인당 20개, 1쿠키당 4KB | 제한 없음 (서버 용량) |
보안 | 세션보다 취약 | 쿠키보다 안전 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
만료시점 | 쿠키 저장시 설정 (설정 없을 시에는 브라우저 종료시 만료) |
브라우저 종료시 삭제 |
댓글