session, cookie

jihyun·2023년 3월 6일
0

TIL

목록 보기
15/17

HTTP 요청은 stateless
= 다른 요청과 독립적이고, 이전 상태를 기억할 수 없다.

session

웹 사이트 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법

서버 측에 데이터를 저장하고, 세션의 키값만을 클라이언트 측에 보관한다.
브라우저는 필요할 때마다 이 키값을 이용하여 서버에 저장된 데이터를 사용한다.

session DB

로그인 예시
로그인 성공 -> session DB에 user 정보 생성하고 해당 session id를 브라우저에 넘긴다.
브라우저가 요청시에 cookie를 통해서 session id를 전달하면 session DB를 확인하고 사용자 정보를 확인할 수 있다.
따라서 session을 사용하는 경우 중요한 정보를 서버 측에서 관리한다.
사용하는 유저가 많아지는 경우 더 많은 리소스를 필요로 한다.

정보를 전달하는 매개체
웹 사이트에 접속할 때 서버가 사용자의 웹 브라우저에 전송하는 데이터 조각이다. (인증 정보 외에도 다양한 정보 저장, 브라우저에만 존재)
브라우저는 저장된 정보를 client 측에 저장해 놓았다가, 동일한 서버에 재요청 시 재사용한다.

사용자의 정보가 컴퓨터에 고스란히 남기 때문에 사생활 침해의 우려가 있으며, 보안 관련 이슈 있을 수 있다.

  • 세션 쿠키 : 지속 시간을 전달하지 않는 경우 브라우저 종료 전까지 유효, 웹브라우저를 끄면 사라지는 휘발성 쿠키
  • 지속 쿠키 : 명시된 지속 시간이 지나면 무효, 껐다 켜도 남아있음

쿠키의 옵션

options: {
path: 특정 디렉토리에서만 쿠키를 유효하게 할 수 있음, 해당 디렉토리와 하위 경로 포함
domain: 어떤 도메인에서 쿠키를 유효하게 할 지 설정 가능
encode
expires: 쿠키 만료 시간 Date로 설정 + 오래된 브라우저
maxAge: 쿠키 만료까지의 시간, 0이나 -값은 즉시 쿠키 만료
(만약 expires,maxAge 둘 다 set되어있는 경우 maxAge가 우위, maxAge를 사용하자)
httpOnly : HTTP 프로토콜에서만 사용하려면 true로 설정, js를 이용해서 쿠키 악용하는 것을 방지
sameSite
secure: HTTPS 프로토콜에서 사용하려면 true로 설정
}

//ex.nookies(next.js cookie 라이브러리)
//setCookie(ctx, name, value, options)

setCookie({ res }, 'fromServer', 'value', {
            maxAge: 30 * 24 * 60 * 60,
            path: '/page',
          });

참고자료
https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies#set-cookie_%EA%B7%B8%EB%A6%AC%EA%B3%A0_cookie_%ED%97%A4%EB%8D%94
http://www.tcpschool.com/php/php_cookieSession_cookie
http://www.tcpschool.com/php/php_cookieSession_session

0개의 댓글