개요
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
서버 측
cookieParser
및 session
미들웨어 다음에 핸들러가 발생 하면 변수에 액세스 할 수 있습니다 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에서 가져온 것입니다.