HTTP 쿠키, 세션
개발 | | 3분 읽기

쿠키란?
브라우저에 저장되는 작은 크기의 문자열(4KB)
서버에 저장할 수 있기 때문에 서버에서 사용
Set-Cookie: <cookie-name>=<cookie-value>
요청 시 헤더에 전송, 같은 도메인에서 만들어진 쿠키만 전송
- 지속 시간
- 영구 쿠키 : 만료 기간이 있어 만료 기간이 끝난 후 삭제
- 세션 쿠키 : 만료 기간 없이 브라우저 종료 시 삭제
- 도메인별
-
퍼스트파티 쿠키
- 같은 도메인에서 생성된 쿠키(서브 도메인 포함)
-
서드파티 쿠키
- 다른 도메인에서 생성된 쿠키
- 스크립트가 존재하면 생김 (ex. 구글 애드)
- 다른 도메인으로 요청을 하는 경우에 언제든지 생성될 수 있음
- 티스토리에 방문했을 때 구글 애드 때문에 서드파티 쿠키가 생성됨
- 사용자의 방문 사이트 파악 = 광고
- 개인정보 침해 ⇒ 크롬에서 서드파티 쿠키 지원 종료 계획을 밝혔는데 결국 유지
-
쿠키가 왜 나왔어?
http ⇒ 비연결성, 무상태성
클라 - 서버 요청과 응답이 끝나면 그냥 연결을 끊어서 이미 방문했는지, 사용자 정보를 알 수 없음
어떻게 작동함? 통신은 어떻게 됨?
- 로그인으로 http 요청
- 유저 디비 접속해서 유저 정보 찾음
- 서버는 쿠키를 만들어서 헤더에 넣어 전송
Set-Cookie: <cookie-name>=<cookie-value> - 클라이언트 쿠키 저장소에 쿠키 저장
쿠키 + 세션
세션 : 웹 사이트에 이용되는 사용자 정보를 서버에 저장하는 방법
쿠키는 사용자 정보를 브라우저 쿠키 저장소에 저장, 세션은 서버에 저장
- 로그인으로 http 요청
- 세션 디비에 유저 정보와 검증되면 반환, 없으면 새로 추가
- 서버는 쿠키에 세션 아이디를 만들어서 헤더에 넣어 전송
- 클라이언트 쿠키 저장소에 쿠키 저장
- 후에 세션 아이디를 통해 요청, 세션 디비에서 세션 아이디 검색
쿠키에 세션 아이디 외의 정보를 기록하지 않음으로써 안전성 확보
근데 서버가 여러 개 있는 경우에는 서버 당 세션을 관리하기 때문에
- Http Session을 이용하면 WAS 서버 1대 당 하나의 세션 저장소가 형성
- Web Application Server
- 사용자의 입력을 받아 서버에서 무언가를 처리하고 그 결과를 보여주는 동적인 데이터를 처리하는 웹서버
- PHP, JSP, ASP, Next
- WEB 서버 : HTML, CSS, js, jpg 등 정적인 데이터를 처리하는 웹서버(Apache, ngnix)
따라서 로드 밸런서가 처음 요청한 서버가 아닌 다른 서버로 요청을 보내면 통과되지 않을 수도 있음
⇒ 너무 많아지면 세션 디비가 부담 ⇒ Radis ?
토큰
인증에 대한 정보를 사용자 쪽에 저장
시크릿 키를 사용해서 만들고 인증 과정을 거침
시크릿 키는 서버 내부에 저장
요청이 오면 세션 디비가 아닌 시크릿 키를 이용해 유효성 검사 ⇒ 사용자 정보 디코딩
서버에서 각자 가진 시크릿 키를 통해 해독 가능 ⇒ 확장성
리프래시 토큰도 시크릿키로 같이 만듦, 그리고 리프래시 토큰만 저장