bgyoonsContact

HTTP 쿠키, 세션

개발 | | 3분 읽기

쿠키란?

브라우저에 저장되는 작은 크기의 문자열(4KB)

서버에 저장할 수 있기 때문에 서버에서 사용

Set-Cookie: <cookie-name>=<cookie-value>

요청 시 헤더에 전송, 같은 도메인에서 만들어진 쿠키만 전송

  • 지속 시간
    • 영구 쿠키 : 만료 기간이 있어 만료 기간이 끝난 후 삭제
    • 세션 쿠키 : 만료 기간 없이 브라우저 종료 시 삭제
  • 도메인별
    • 퍼스트파티 쿠키

      • 같은 도메인에서 생성된 쿠키(서브 도메인 포함)
    • 서드파티 쿠키

      • 다른 도메인에서 생성된 쿠키
      • 스크립트가 존재하면 생김 (ex. 구글 애드)
      • 다른 도메인으로 요청을 하는 경우에 언제든지 생성될 수 있음

      • 티스토리에 방문했을 때 구글 애드 때문에 서드파티 쿠키가 생성됨
      • 사용자의 방문 사이트 파악 = 광고
      • 개인정보 침해 ⇒ 크롬에서 서드파티 쿠키 지원 종료 계획을 밝혔는데 결국 유지

쿠키가 왜 나왔어?

http ⇒ 비연결성, 무상태성

클라 - 서버 요청과 응답이 끝나면 그냥 연결을 끊어서 이미 방문했는지, 사용자 정보를 알 수 없음

어떻게 작동함? 통신은 어떻게 됨?

  1. 로그인으로 http 요청
  2. 유저 디비 접속해서 유저 정보 찾음
  3. 서버는 쿠키를 만들어서 헤더에 넣어 전송 Set-Cookie: <cookie-name>=<cookie-value>
  4. 클라이언트 쿠키 저장소에 쿠키 저장

쿠키 + 세션

세션 : 웹 사이트에 이용되는 사용자 정보를 서버에 저장하는 방법

쿠키는 사용자 정보를 브라우저 쿠키 저장소에 저장, 세션은 서버에 저장

  1. 로그인으로 http 요청
  2. 세션 디비에 유저 정보와 검증되면 반환, 없으면 새로 추가
  3. 서버는 쿠키에 세션 아이디를 만들어서 헤더에 넣어 전송
  4. 클라이언트 쿠키 저장소에 쿠키 저장
  5. 후에 세션 아이디를 통해 요청, 세션 디비에서 세션 아이디 검색

쿠키에 세션 아이디 외의 정보를 기록하지 않음으로써 안전성 확보

근데 서버가 여러 개 있는 경우에는 서버 당 세션을 관리하기 때문에

- Http Session을 이용하면 WAS 서버 1대 당 하나의 세션 저장소가 형성
    - Web Application Server
    - 사용자의 입력을 받아 서버에서 무언가를 처리하고 그 결과를 보여주는 동적인 데이터를 처리하는 웹서버
    - PHP, JSP, ASP, Next
    - WEB 서버 : HTML, CSS, js, jpg 등 정적인 데이터를 처리하는 웹서버(Apache, ngnix)

따라서 로드 밸런서가 처음 요청한 서버가 아닌 다른 서버로 요청을 보내면 통과되지 않을 수도 있음

⇒ 너무 많아지면 세션 디비가 부담 ⇒ Radis ?

토큰

인증에 대한 정보를 사용자 쪽에 저장

시크릿 키를 사용해서 만들고 인증 과정을 거침

시크릿 키는 서버 내부에 저장

요청이 오면 세션 디비가 아닌 시크릿 키를 이용해 유효성 검사 ⇒ 사용자 정보 디코딩

서버에서 각자 가진 시크릿 키를 통해 해독 가능 ⇒ 확장성

리프래시 토큰도 시크릿키로 같이 만듦, 그리고 리프래시 토큰만 저장