본문 바로가기
코드스테이츠

3/7 일일정리 쿠키와 세션

by 강물둘기 2023. 3. 7.

쿠키(Cookie)

쿠키란 어떤 웹사이트에 들어갈 때 서버가 클라이언트에게 전달하여 저장하는 키와 값으로 구성된 작은 데이터이다.

서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단이다.

주로 로그인 정보나 장바구니 정보를 저장하는 용도로 쓴다.

출처 : https://interconnection.tistory.com/74

 

쿠키의 특징

- 유효 시간이 정해지면 브라우저를 종료해도 해당 도메인에 대한 쿠키는 삭제되지 않는다.

- 해당 도메인에 쿠키가 존재하면 웹브라우저는 도메인에 http요청시 쿠키와 함께 전달한다. 

- HTTP의 무상태성과 비연결성을 보완하고자 쿠키를 사용한다.

 

쿠키의 구성요소(쿠키의 옵션)

⓵ Domain

 말 그대로 도메인 정보를 담고 있다. (ex. www.google.com)

해당 도메인으로 요청을 보낼 때 브라우저가 자동으로 쿠키정보를 담아 요청을 보낸다.

⓶ Path

 Path는 세부 경로를 뜻한다. 해당 경로 하위 경로에는 모두 쿠키 사용이 가능하다.

⓷ MaxAge / Expires

 쿠키의 유효 시간을 설정하는 옵션이다. 

 MaxAge는 쿠키의 유효시간을 초단위로 설정하고 Expires는 쿠키의 만료시간을 설정한다.

 유효한 시간이 지나면 쿠키는 자동으로 파괴된다.

⓸ Secure

  프로토콜에 따른 쿠키 전송 여부를 결정하는 옵션이다. true로 설정하면 HTTPS 프로토콜만 사용가능하다.

* localhost는 예외로 Secure가 true여도 사용 가능하다.

⓹ Httponly

 자바스크립트로 쿠키에 접근이 가능한지 여부를 나타낸다. true이면 자바스크립트로 접근 불가능하다.

 기본값은 false로 되어 있는데, 이 경우 쿠키를 탈취당할 위험이 있다.

⓺ SameSite

 Cross-Origin 요청을 받는 경우 요청에 사용한 메서드와 해당 옵션의 조합을 기준으로 쿠키 전송 여부를 결정한다.

  • Lax : GET 요청에 대해서만 쿠키를 전송한다.
  • Strict : Cross-Origin 요청은 전부 쿠키를 전송하지 않는다.
  • None : 모든 요청에 대해 쿠키를 전송한다. 이 때는 Secure 옵션이 필요하다.

 

쿠키를 사용하면 상태를 유지할 수 있다는 장점이 있지만, 쿠키가 다른사람에게 탈취당할 수 있다는 취약점도 있다.

 

세션(Session)

세션은 쿠키를 기반으로 하고 있지만 클라이언트가 아닌 서버에서 정보를 관리한다.

서버에서 클라이언트를 구분하기위해 암호화된 세션 ID를 클라이언트에게 부여하고 브라우저가 종료될 때 까지 인증상태를 유지한다.

출처 : 코드스테이츠

세션의 특징

- 클라이언트에게 암호화된 고유한 세션 ID를 부여한다. 

- 서버는 전달받은 세션 ID를 확인하고 인증된 클라이언트라면 그에 맞는 응답을 보내준다.

- 보안면에서 쿠키보다 우수하다. 신뢰할 수 있는 유저인지 확인 가능하다.

- 인증절차가 필요하기 때문에 쿠키방식보다 메모리를 더 많이 사용한다.

- 하나의 서버에서만 접속상태를 가지기 때문에 분산에 불리하다.

 

 

쿠키, 세션 사용 실습

쿠키와 세션을 서버에서 어떻게 만들어 보내는지 실습을 해봤다.

쿠키

유저가 로그인을 할 때 해당 id와 비밀번호가 서버의 데이터에 존재하면 접속과 함께 쿠키를 전달한다.

쿠키를 만드는데는 cookie 메서드를 사용하면 된다. 전달인자로는 쿠키이름, 쿠키 값, 쿠키 옵션을 받는다.

만약 로그인 유지 상태가 true이면 추가로 MaxAge와 expires 옵션을 추가해 영속성을 부여해준다.

쿠키를 만들어서 redirect 메서드로 userinfo.js모듈로 쿠키를 넘기면 해당 모듈에서 쿠키와 함께 로그인 데이터를 클라이언트에게 전달한다. 여기서 비밀번호같은 민감한 정보는 지우고 전달한다.

 

세션

세션도 쿠키와 비슷한데, 쿠키 대신 세션 id를 전달하면 된다.

 

Reference

- https://interconnection.tistory.com/74

-  코드스테이츠

'코드스테이츠' 카테고리의 다른 글

3/9 일일정리 OAuth  (0) 2023.03.09
3/8 일일정리 토큰  (0) 2023.03.08
3/6 일일정리 네트워크  (0) 2023.03.06
3/3 일일정리 웹 표준/웹 접근성 개선 실습  (0) 2023.03.03
3/2 일일 정리 웹접근성  (0) 2023.03.02

댓글