본문 바로가기
CS/HTTP

[HTTP] 클라이언트의 인증 정보 (쿠키, 세션)

by 스응 2023. 3. 24.
728x90
728x90

HTTP 프로토콜의 특징

  ① Connectionless     (↔ 소켓 통신의 커넥션 풀)

      - 하나의 요청(request)에 대한 하나의 반응(response)을 한 후, 연결을 종료함

          → 새 요청이 있을 때마다 항상 새로운 연결을 맺음

 

  ② Stateless

      - 통신이 끝난 후 상태 정보를 저장하지 않음

          → 이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없음

 

  ⇒ 웹 서버는 클라이언트를 기억할 수 없음 (쿠키 or 세션 필요)

  

 


쿠키 (Cookie)

  - Key와 Value로 이뤄진 일종의 단위

  - 서버에서 생성되어 클라이언트의 브라우저에 저장됨

      → 클라이언트가 다시 서버에 요청을 보낼 때 HTTP 메시지 헤더에 포함되는 정보

 

#  작동 방식

  1. 서버가 클라이언트에게 쿠키를 발급함

  2. 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 함께 전송함

  3. 서버는 클라이언트의 요청에 포함된 쿠키를 확인해서 클라이언트를 구분함

  

#  용도

  - 클라이언트의 정보 기록

      : 각 클라이언트의 옵션을 기억하기 위해 쿠키에 저장해서 사용함

          ex) 다시 보지 않기, 아이디 기억하기 등

  - 상태 정보 표현

      : 클라이언트를 식별할 수 있는 값을 쿠키에 저장해서 사용함

          ex) 이용자 맞춤형 서비스

 

#  문제점

  - 악의적으로 쿠키 정보를 변조해서 서버에 요청할 수 있다는 문제 발생

      → 보완 : 세션 (Session)을 이용한 식별

      · 쿠키로는 주로 클라이언트의 중요하지 않은 정보를 저장/유지함

 

 

반응형
728x90

세션 (Session)

  - 쿠키에 인증 상태를 저장하지만, 클라이언트가 인증 정보를 변조할 수 없게 함

 

#  작동 방식

  1. 인증 정보를 서버에 저장함

  2. 해당 데이터에 접근할 수 있는 키를 유추할 수 없는 랜덤한 문자열로 만들어 클라이언트에 전달함

      : Session ID (최초 요청 시에만)

  3. 브라우저는 해당 키를 쿠키에 저장하고, 이후에 HTTP 요청을 보낼 때 사용함

      : HTTP 메시지 헤더에 포함됨

  4. 서버는 요청에 포함된 키에 해당하는 데이터를 가져와 인증 상태를 확인함

 

#  JSESSIONID

  - JSP/Servlet 컨테이너에서 사용되는 SESSIONID의 이름

 

  - 클라이언트가 서버에 접속하면 웹 컨테이너는 해당 클라이언트와 연관된 HttpSession 객체를 생성함

      → JSESSIONID를 생성하여 클라이언트에게 전송함

      → 이후 클라이언트는 쿠키를 통해 JSESSIONID를 서버로 전송함

      → 해당 서버는 그 ID 값으로 클라이언트와 연관된 HttpSession 객체를 찾아서 처리함

 

320x100
반응형

댓글