Programing

Express.js에서 Node.js를 사용하는 세션은 어떻게 작동합니까?

lottogame 2020. 8. 26. 08:20
반응형

Express.js에서 Node.js를 사용하는 세션은 어떻게 작동합니까?


Express.js를 사용하면 세션이 매우 간단합니다. 나는 그들이 실제로 어떻게 작동하는지 궁금합니다.

클라이언트에 쿠키를 저장합니까? 그렇다면 그 쿠키는 어디에서 찾을 수 있습니까? 필요한 경우 어떻게 디코딩합니까?

기본적으로 사용자가 실제로 사이트에 없었을 때에도 사용자가 로그인했는지 확인할 수 있기를 원합니다 (예 : 다른 사이트에있을 때 페이스 북이 로그인 한 상태임을 어떻게 알 수 있는지). 하지만 세션의 작동 방식을 먼저 이해해야한다는 것을 이해해야합니다.


주제에 대한 문서따르면 다음과 같이 들리지만 Express.js를 사용한 적이 없습니다 .

  • 쿠키는 키 (서버가 세션 데이터를 검색하는 데 사용함) 및 해시 (서버가 쿠키 데이터가 변조되지 않았는지 확인하는 데 사용할 것임)와 함께 클라이언트에 저장됩니다. 쿠키가 유효하지 않을 값)

  • 일부 프레임 워크 (예 : Play Framework !) 와 달리 세션 데이터 는 서버에 보관되므로 쿠키는 실제 세션 데이터의 보유 자라기보다는 세션의 자리 표시 자에 가깝습니다.

  • 에서 여기 서버에서이 세션 데이터가 메모리에 기본적으로처럼 그가 어떤 저장 형태로 구현 적절한 API에 변경 될 수 있지만, 그것은 보인다.

따라서 req말한 것처럼 특정 요청 객체 없이 항목을 확인하려면 동일한 저장소에 액세스하면됩니다. 첫 번째 문서 페이지의 맨 아래에는 스토리지가 구현해야하는 필수 메소드가 자세히 설명되어 있으므로 스토리지 API에 익숙 .getAll()하다면 이와 유사한 것이 존재 하는 경우 실행 하고 세션 데이터를 반복하여 읽을 수 있습니다. 원하는 값.


개요

Express.js는 쿠키를 사용하여 사용자의 브라우저에 세션 ID (암호화 서명 포함)를 저장 한 다음 후속 요청에서 해당 쿠키의 값을 사용하여 서버에 저장된 세션 정보를 검색합니다. 이 서버 측 저장소는 메모리 저장소 (기본값) 또는 필요한 메서드 (예 : connect-redis ) 를 구현하는 다른 저장소 일 수 있습니다.

세부

Express.js / Connect는을 사용하여 24 자 Base64 문자열을 utils.uid(24)만들고 req.sessionID. 이 문자열은 쿠키의 값으로 사용됩니다.

고객 입장에서

서명 된 쿠키는 항상 세션에 사용되므로 쿠키 값의 형식은 다음과 같습니다.

[sid].[signature]

여기서 [sid]는 세션 ID이고 [signature]는 세션 미들웨어 초기화시 제공된 비밀 키를 사용하여 [sid]에 서명하여 생성됩니다. 서명 단계는 변조를 방지하기 위해 수행됩니다. 사용 된 비밀 키에 대한 지식없이 [sid]를 수정 한 다음 [signature]를 다시 만드는 것은 계산적으로 실행 불가능해야합니다. 세션 쿠키는 [sid] 수정이 필요하지 않은 경우 여전히 도난 및 재사용에 취약합니다.

이 쿠키의 이름은

connect.sid

서버 측

cookieParsersession미들웨어 다음에 핸들러가 발생 하면 변수에 액세스 할 수 있습니다 req.cookies. 여기에는 키가 쿠키 키이고 값이 쿠키 값인 JSON 개체가 포함됩니다. 여기에는 이름이 지정된 키가 포함 connect.sid되며 해당 값은 서명 된 세션 식별자가됩니다.

다음은 모든 요청에서 세션 쿠키의 존재를 확인하고 해당 값을 콘솔에 인쇄하는 경로를 설정하는 방법의 예입니다.

app.get("/*", function(req, res, next) {

    if(typeof req.cookies['connect.sid'] !== 'undefined') {
        console.log(req.cookies['connect.sid']);
    }

    next(); // Call the next middleware
});

또한 구성 섹션 app.use(app.router)cookieParser뒤에 라우터 ( )가 포함되어 있는지 확인해야합니다 session.

다음은 Express.js / Connect에 의해 내부적으로 저장된 데이터의 예입니다.

{
  "lastAccess": 1343846924959,
  "cookie": {
    "originalMaxAge": 172800000,
    "expires": "2012-08-03T18:48:45.144Z",
    "httpOnly": true,
    "path": "/"
  },
  "user": { 
    "name":"waylon",
    "status":"pro"
  }
}

user필드는 사용자 정의이다. 다른 모든 것은 세션 관리의 일부입니다.

예는 Express 2.5에서 가져온 것입니다.


I'm curious how they actually work though.

Try to look at this answer and wiki stuff.

Does it store some cookie on the client?

Yes, it's usually a cookie with assigned session ID, which should be signed with a secret in order to prevent forgery.

If so, where can I find that cookie? If required, how do I decode it?

You shouldn't mess with a session cookie on the client side. If you want to work with sessions on the server side you should check out related express.js and connect docs.

참고URL : https://stackoverflow.com/questions/5522020/how-do-sessions-work-in-express-js-with-node-js

반응형