Dreamhack-web

Cookie & Session

White_Bean 2023. 6. 4. 01:37
더보기

웹 서버는 수많은 클라이언트를 어떻게 구별하고 서로 다른 결과를 반환할까?

HTTP프로토콜로 웹 서버와 통신할 때에는 웹 서버에 명령을 내리기 위해 GET, POST와 같은

메소드와 자원의 위치를 가리키는 URL등이 포함됨

헤더(Header)를 통해서 웹 서버에게 요청을 보내고, 웹 서버는 헤더를 읽고 클라이언트에게 결과 값을 반환

 

Cookie 🍪

클라이언트의 IP주소와 User-Agent는 매번 변경될 수 있음

HTTP 프로토콜의 Connectionless와 Stateless 특징 때문에 웹 서버는 클라이언트를 기억할 수 없음

이 특징을 갖는 HTTP에서 상태를 유지하기 위해 쿠키(Cookie)가 탄생함

 

Connectionless와 Stateless가 뭘까?

  • Connectionless : 통신 프로토콜에서 데이터 전송에 연결을 설정하지 않는 방식을 말한다.
  • Stateless : 통신 프로토콜에서 상태 정보를 유지하지 않는 방식을 말한다.

쿠키

Key와 Value로 이뤄진 일종의 단위로, 서버가 클라이언트에게 쿠키를 발급하면, 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 같이 전송함

클라이언트의 정보기록과 상태 정보를 표현하는 용도로 사용

 

 

Session 📜

인증 정보를 서버에 저장하고 해당 데이터에 접근할 수 있는 키(유추할 수 없는 랜덤한 문자열)를 만들어 클라이언트에 전달하는 방식이며 해당 키를 일반적으로 Session ID라고 한다.

브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP 요청을 보낼 때 사용하고 서버는 요청에 포함된 키에 해당하는 데이터를 가져와 인증 상태를 확인한다.

 

 

쿠키 적용법 👨‍🎓

쿠키는 클라이언트에 저장되기 때문에 클라이언트는 저장된 쿠키를 조회, 수정, 추가할 수 있다.쿠키를 설정할 때에는 만료 시간을 지정할 수 있고, 만료 시간 이후에는 클라이언트에서 쿠키가 삭제된다.쿠키는 서버와 클라이언트 둘 다 설정할 수 있다.

 

서버 (Set-Cookie)

HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: name=test;
Set-Cookie: age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;
...

클라이언트 (js를 통해)

document.cookie = "name=test;"
document.cookie = "age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;"