본문 바로가기
부트캠프교육중/HTTP, 네트워크

Session

by 뭉지야 2023. 3. 9.
728x90

# session
-서버가 client에 유일하고 암호화된 ID를 부여
-중요 데이터는 서버에서 관리
-쿠키는 클라이언트에 저장. 세션은 서버에 저장.

 

1. 로그인
-> 서버는 인증에 성공했다고 판단 (그럼 유저가 매번 로그인할 필요가 없다.)
  인증에 따라 리소스의 접근 권한이 달라진다.
서버: 사용자가 인증에 성공했음을 알고있어야한다.
클라이언트: 인증 성공을 증명할 수단을 갖고있어야한다.
 *세션: 사용자가 인증에 성공한 상태


2. 서버는 일종의 저장소에 세션을 저장한다.
3. 세션이 만들어지면, 각 세션을 구분할수있는 세션 아이디도 만들어진다.
4. 클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달한다.
이때 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용한다.
쿠키에는 서버에서 발급한 세션 아이디를 저장한다.

5. 쿠키를 통해 유효한 세션 아이디가 서버에 전달된다. 
6. 세션 스토어에 해당 세션이 존재한다면 서버는 해당 요청에 접근 가능하다고 판단한다.
하지만 쿠키에 세션 아이디 정보가 없는 경우, 서버는 해당 요청이 인증되지 않았음을 알려준다.



<로그아웃>
-서버: 세션 정보를 삭제해야 한다.
-클라이언트: 쿠키를 갱신하거나 삭제해야 한다.
-클라이언트에서 세션 정보를 없애기 위해서는 res.cookie로 쿠키의 값을 무효한 값으로 갱신하거나, res.clearCookie로 쿠키를 삭제해버리면 된다.

<express-session>
-세션을 위한 미들웨어
-express 서버에서 쉽게 세션을 위한 공간을 다룰수 있도록 만들어준다.
-세션의 경우 secret 옵션의 비밀키를 이용해 암호화해 세션id라는 것을 생성한다.그리고 이것을 클라이언트에게 쿠키로 전송한다.
쿠키로 전송된 세션id는 이에 종속되는 고유한 세션 객체를 가지며 이는 서버에 저장된다. 이때 세션 객체는 유저별로 독립적으로 생성된 객체이므로 유저별로 각각 다른 데이터를 저장할수있다.
따라서 클라이언트에 유저의 개인정보를 담지 않고도 서버가 클라이언트의 세션 id를 이용해 유저의 인증여부를 판단할수있다.
-세션 객체는 req.session으로 접근할수있다. 세션에 임의의 데이터를 저장하거나 불러올수있다.

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,
    },
  })
);

 

728x90

'부트캠프교육중 > HTTP, 네트워크' 카테고리의 다른 글

토큰 Token  (0) 2023.03.09
해싱 Hashing  (0) 2023.03.09
Cookie  (0) 2023.03.09
TCP/IP 4계층 모델  (0) 2023.03.09
HTTP의 특징  (0) 2023.03.09