티스토리 뷰

개발/node, express

쿠키

네스사 2023. 5. 2. 22:17

쿠키


  • 쿠키는 HTTP의 무상태성을 보완하기 위해 만들어진 것으로, 사이트에 접속할 때 서버에 의해 사용자의 브라우저에 저장되는 정보를 의미합니다.
  • 쿠키는 웹 브라우저에서 벗어나도 유지되며 다시 해당 웹 사이트를 방문하면 서버에 보내는 모든 요청에 쿠키를 함께 보냅니다.
  •  이를 통해 서버가 클라이언트에 특정한 데이터를 저장할 수 있어, 로그인 정보나 비회원의 장바구니 같은 정보를 저장하는 데 사용되고 있습니다.
  • 단, 쿠키는 사용자가 요청할 때마다 서버에 전송되므로, 사용자가 많을수록 쿠키를 많이 사용하기에 서버에 부하가 걸립니다. 
  • 또, 다른 사람이 사용자의 브라우저를 통해 쿠키를 훔쳐 사용자 정보를 탈취할 수 있습니다.

 

쿠키 옵션 종류


  • 서버는 쿠키를 이용하여 데이터를 저장하고 불러와서 사용할 수 있지만, 데이터를 저장한 이후 아무 때나 데이터를 가져올 수는 없습니다.
  • 데이터를 저장한 이후에는 도메인이나 경로 특정 조건들을 만족해야 사용할 수 있고, 이런 조건을 http 헤더를 사용해 쿠키 옵션으로 표현할 수 있습니다.
const cookieOptions = {
  name: 'myCookie',
  value: '12345',
  expires: new Date(Date.now() + 3600 * 1000), // 1 hour
  domain: '.example.com',
  path: '/',
  secure: true,
  httpOnly: true
};

res.cookie(cookieOptions);
//쿠키를 보내는 메서드
res.clearCookie
//쿠키를 삭제하는 메서드
  • 다음은 쿠키의 주요 옵션들입니다.

Name: 쿠키의 이름을 지정합니다. 이름은 일반적으로 문자열로 지정됩니다.

 

Value: 쿠키의 값입니다. 값은 일반적으로 문자열이나 숫자 등의 데이터 형식으로 지정됩니다.

 

Expires: 쿠키의 만료 시간을 지정합니다. 만료 시간을 지정하지 않으면 브라우저가 종료될 때까지 쿠키가 유지됩니다.

 

MaxAge: 쿠키의 만료 시간을 지정합니다. Expires와 달리 유효한 시간을 초 단위로 설정하는 옵션입니다.

 

Domain: 쿠키를 전송할 도메인을 지정합니다. 이 옵션을 지정하지 않으면 현재 도메인에만 쿠키가 전송됩니다.

 

Path: 쿠키를 전송할 경로를 지정합니다. 이 옵션을 지정하지 않으면 '/' 경로에만 쿠키가 전송됩니다. 설정된 경로를 포함하는 하위 경로로 요청을 하더라도 쿠키를 서버에 전송할 수 있습니다. 예) /users가 path면 /users/login도 쿠키사용이 가능합니다.

 

Secure: HTTPS 프로토콜을 사용하는 경우에만 쿠키가 전송되도록 지정합니다. 단, 개발 단계에서는 localhost를 사용하는 경우가 많기 때문에 localhost인 경우에는 HTTPS가 아니어도 쿠키 전송이 가능합니다.

 

HttpOnly: 자바스크립트로 브라우저의 쿠키에 접근이 가능한지 여부를 결정합니다. true로 설정된 경우, 자바스크립트로 쿠키에 접근이 불가합니다. 이를 이용해 XSS(Cross-Site Scripting) 공격을 방지할 수 있습니다.

 

SameSite: Cross-Site 요청을 받은 경우, 요청에서 사용한 메서드와 해당 옵션의 조합을 기준으로 서버의 쿠키 전송 여부를 결정하게 됩니다. 이때, eTLD+1이 다른 경우 Cross-Site로 구분됩니다.  SameSite의 속성은 다음과 같습니다.

  • Lax: Cross-Site 요청이라면 GET 메서드에 대해서만 쿠키를 전송할 수 있습니다.
  • Strict: 단어 그대로 가장 엄격한 옵션으로, Cross-Site가 아닌 Same-Site인 경우에만 쿠키를 전송할 수 있습니다.
  • None: Cross-Site에 대해 가장 관대한 옵션으로 항상 쿠키를 보내줄 수 있습니다. 다만 쿠키 옵션 중 Secure 옵션이 필요합니다.

 

 

 

'개발 > node, express' 카테고리의 다른 글

해싱과 토큰  (0) 2023.05.03
세션  (0) 2023.05.02
HTTPS 구현  (0) 2023.05.02
Node. js와 express의 기본 문법  (0) 2023.04.09
CORS  (0) 2023.04.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함