ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cookie / Session
    FE 2023. 7. 2. 23:44

    Cookie : 서버에서 클라이언트에 영속성 있는 데이터를 저장하는 방법

    서버에서 클라이언트에 쿠키를 전송하는 것만 의미하지 않고 클라이언트에서 서버로 쿠키를 다시 전송하는 것도 포함됨

    데이터를 저장한 이후 아무때나 데이터를 가져올 수 없음. 데이터를 저장한 이후 특정 조건들이 만족되어야 다시 가져올 수 있기 때문

    'Set-Cookie':[
                'cookie=yummy', 
                'Secure=Secure; Secure',
                'HttpOnly=HttpOnly; HttpOnly',
                'Path=Path; Path=/cookie',
                'Doamin=Domain; Domain=codestates.com'
            ]

    ➡️ http 헤더를 사용해 쿠키 옵션으로 표현

     

     

    쿠키 옵션 종류

    • Domain : 흔히 사용하는 www.google.com과 같은 서버에 접속할 수 있는 이름
      쿠키 옵션에서 도메인 정보가 존재한다면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야 쿠키를 전송할 수 있음
    • Path : 세부 경로로써 서버가 라우팅할 때 사용하는 경로. (/users/login 과 같은)
    • MaxAge or Expires : 쿠키가 유효한 기간을 정하는 옵션
      MaxAge는 쿠키가 유효한 시간을 초 단위러 설정하는 옵션, Expires는 언제까지 쿠키가 유효한지 심판의 날을 지정 
      옵션의 여부에 따라 세션쿠키와 영속성 쿠키로 나눌 수 있음
    • Secure : 사용하는 프로토콜에 따른 쿠키의 전송 여부를 결정하는 옵션 (Secures 옵션이 true로 설정된 경우 HTTPS를 이용하는 경우에만 쿠키를 전송할 수 있음)
    • HttpOnly : 자바스크립트로 브라우저의 쿠키에 접근이 가능한지 여부를 결정 (해당 옵션이 true일 경우, 자바스크립트로 쿠키에 접근 불가)
    • SameSite : Cross-Site 요청을 받은 경우, 요청에서 사용한 메서드(e.g. GET, POST, PUT, PATCH..)와 해당 옵션의 조합을 기준으로 서버의 쿠키 전송 여부를 결정
      Cross-Origin은 서버의 도메인, 프르토콜, 포트 중 하나라도 다른 경우 Cross-Origin으로 구분 / Cross-Site는 eTLD+1이 다른 경우 Cross-Site로 구분
      옵션 : Lax(GET 메서드에 대해서만 쿠키 전송), Strict(엄격한 옵션 Same-Site인 경우만 쿠키 전송), None(관대한 옵션으로 항상 쿠키 전송)이 있음

     

    쿠키를 이용한 상태 유지 

    ➡️ 기본적으로 쿠키는 오랜 시간 동안 유지될 수 있고, HttpOnly 옵션을 사용하지 않았다면 자바스크립트를 이용해서 쿠키에 접근할 수 있기 때문에 쿠키에 민감한 정보를 담는 것은 위험

     


    세션기반 인증 (Session-based Authentication)

    로그인

    서버 : 사용자가 인증에 성공했음을 알아야함

    클라이언트 : 인증 성공을 증명할 수단을 갖고 있어야 함

     

    세션 : 사용자가 인증에 성공한 상태 (서버는 일종의 저장소에 세션을 저장하는데 주로 in-memory 또는 세션 스토어에 저장함)

    ➡️ 세션이 만들어지면 각 세션을 구분할 수 있는 세션 아이디도 만들어지는데 보통 클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달함. 웹 사이트에서 로그인을 유지하기 위한 수단으로 쿠키 사용. 쿠키에는 서버에서 발급한 세션 아이디 저장

     

    로그아웃

    서버 : 세션 정보를 삭제

    클라이언트 : 쿠키를 변경하거나 삭제

    ➡️ 세션 아이디가 담긴 쿠키는 클라이언트에 저장되며 서버는 세션을 저장하고 세션 아이디로 인증여부를 판단. 정보를 삭제하기 위해서 res.cookie로 쿠키의 값을 무효한 값으로 변경 또는 res.clearCookie로 쿠키를 삭제

     

    express-session

    세션을 위한 미들웨어, express 서버에서 쉽게 세션을 위한 공간을 다룰 수 있도록 만들어줌

    세션의 옵션을 지정하여 secret 옵션의 비밀키를 이용해 암호화해 세션 Id 생성 후 클라이언트에게 쿠키로 전송.

    const express = require('express');
    const session = require('express-session');
    
    const app = express();
    
    app.use(
      session({
        secret: '@codestates',
        resave: false,
        saveUninitialized: true,
        cookie: {
          domain: 'localhost',
          path: '/',
          maxAge: 24 * 6 * 60 * 10000,
          sameSite: 'none',
          httpOnly: false,
          secure: true,
        },
      })
    );

     

    'FE' 카테고리의 다른 글

    OAuth  (0) 2023.07.04
    Token  (0) 2023.07.03
    [네트워크] 심화  (0) 2023.06.29
    Web standards web accessibility  (0) 2023.06.28
    웹 접근성  (0) 2023.06.27
Designed by Tistory.