HTTP는 connectionless, stateless 특성을 가지고있음
쿠키와 세션은 이 특성으로 인한 문제를 보완하기 위해서 사용한다.
connectionless
- 클라이언트가 요청에 응답을 받으면 연결을 끝는 특성
- Keep-alive라는 값을 헤더에 넣어서 연결을 재활용 할 수 있다. Keep-alive는 HTTP1.1에서 디폴트(현재 버전은HTTP2와 HTTPS)
stateless
- 연결(클라이언트와 서버의 통신)이 끝나면 상태 정보를 유지하지 않는 특성
쿠키
- 클라이언트의 브라우저에서 지정한 로컬 경로에 파일로 저장됩니다.
- 쿠키가 유효한 기간을 명시할 수 있습니다. 유효 시간을 명시하면 브라우저가 종료되도 쿠키가 유효하며 인증이 가능합니다.
- Response Header에 Set-Cookie 속성을 사용해서 쿠키를 생성합니다.
동작방식
- 클라이언트가 페이지를 요청
- 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함 시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 남아있다면 클라이언트에서 보관하고 있음
- 같은 요청을 할 경우 클라이언트는 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽고 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트해서 변경된 쿠키를 HTTP 헤더에 포함해서 응답(Response)
세션
- 세션도 쿠키를 사용합니다.
- 세션은 서버 측에 저장되어 관리됩니다.
- 서버는 클라이언트를 구분하기 위해서 세션 ID를 부여합니다.
- 세션은 최대한 예측하기 어렵게 생성합니다.
- 클라이언트 브라우저가 종료되면 인증이 해제됩니다.
- 브라우저가 종료되지 않아도 일정 시간 응답이 없으면 인증이 해제되게 설정이 가능합니다.
- 사용자(페이지 접속자)가 많아질 수록 서버 메모리 사용량이 늘어나며 부하가 늘어납니다.
동작방식
- 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
- 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
- 클라이언트는 서버에 요청할 때 쿠키와 세션ID를 같이 서버에 전달
- 서버는 세션 ID를 전달 받고 ID에 해당하는 클라이언트 정보를 가져와서 사용
- 클라이언트 정보를 가지고 요청을 처리하고 클라이언트에 응답
쿠키와 세션 차이
- 저장되는 위치(로컬vs서버)
- 처리 속도는 쿠키가 세션보다 빠름(유의미한 차이일까?)
- 파일로 저장vs메모리에 저장->파일로 저장되면 지워도 흔적이 남을 수 있음(포렌식 가능?)
쿠키 저장 위치
브라우저 마다 다르다.
IE
-C:\Users\사용자\AppData\Roaming\Microsoft\Windows\Cookies
Chrome
-C:\Users\사용자\AppData\Local\Google\Chrome\User Data\Default\Cache
크롬은 캐시와 관련된 듯? 캐시는?
세션이 서버 성능에 영향을 주는 문제를 해결하기 위해서 JWT(JSON Web Token)을 사용한다고?
웹 스토리지
로컬 스토리지
- 클라이언트 정보를 영구적으로 저장한다.
세션 스토리지
- 클라이언트 정보를 저장한다. 저장한 정보는 브라우저를 닫을 떄 사라진다.
<출처>
https://interconnection.tistory.com/74
쿠키와 세션 개념
노션 페이지(아래 내용과 동일) 개요 쿠키와 세션은 개발자 말고도 인터넷 사용자라면 누구나 많이 들어본 단어입니다. 하지만 개념에 대해서는 많은 사람들이 헷갈려 하기에 쉽고
interconnection.tistory.com
https://m.blog.naver.com/krquddnr37/20203705957
[Web][Cookie] IE, Chrome 쿠키 저장 위치
쿠키 저장 위치 IE - C:\Users\사용자\AppData\Roaming\Microsoft\Windows\Cookies 크롬 - C:\...
blog.naver.com
로컬스토리지, 세션스토리지, 쿠키 정리
자동 로그인 -> 로컬스토리지입력 폼 정보 -> 세션스토리지비로그인 장바구니 -> 세션스토리지다시 보지 않음 팝업 창 -> 쿠키 자바스크립트 객체 예시 let object = {}loc
velog.io
'웹' 카테고리의 다른 글
API? (0) | 2022.01.16 |
---|---|
JWT를 이용한 로그인 기능 (0) | 2022.01.16 |
Bulma (0) | 2022.01.13 |
Sublime text sudo권한으로 실해하기 (0) | 2021.10.17 |
정적 페이지 VS 동적 페이지 (0) | 2021.10.17 |