2014-10-14 2 views
4

제 3 자 모듈이나 프레임 워크를 사용하지 않고 Node.js를 배우려고합니다. 내가 로그인하는 사용자에게 세션 ID를주는 방법을 알아 내려고하는 시점에 도달하고 있습니다 ...Node.js에서 세션 ID를 어떻게 생성합니까?

지금까지 쿠키를 설정하여 세션 ID를 헤더에 기록하여 설정할 수 있습니다.

writeHead(200, {'set-cookie':'Math.random() ' }); 

그런 다음 세션 ID를 검색하고 나중에 데이터베이스와 비교할 수 있습니다.

request.headers.cookie(request.url); 

그러나 세션 ID 값을 어떻게 생성합니까? 나는 프로그래밍에 초보적이다. 내가 처음 생각한 것은 자바 스크립트의 것입니다. Math.random(); 그리고 그 값을 사용하여 쿠키 (세션 id)를 설정하십시오. 내 마음 속에는 바보 같은 느낌이 들지만 그것이 내가 생각할 수있는 정도입니다.

제 3 자 모듈 인 Node.js를 사용하여 세션 id를 생성하는 방법은 무엇입니까? barebones please!

+0

좋은 질문입니다 ... 쿠키에서 세션 ID를 처리하는 방법에 대한 강력한 보안 함의가 있음을주의하십시오. 무엇을하더라도 프로덕션 환경에서 구현 한 것을 구현하지 마십시오. 잘 검증 된 상용 코드를 사용할 수 있습니다. 이제 원하는대로 세션 ID를 생성 할 수 있습니다. 이것은 Node.js 질문이 아닙니다. 그것은 최고의 연습 및 JavaScript 질문입니다. – Brad

답변

3

참고 : 연결하는 프레임 워크, 표현식, 코아 또는 기타 여러 가지 프레임 워크에 대해 세션 관리자를 사용해야합니다.


crypto.randomBytes를 사용하여 당신에게 UUID version 4 (random)을 줄 것이다.

var crypto = require('crypto'); 
module.exports = genUuid; 

function genUuid(callback) { 
    if (typeof(callback) !== 'function') { 
    return uuidFromBytes(crypto.randomBytes(16)); 
    } 

    crypto.randomBytes(16, function(err, rnd) { 
    if (err) return callback(err); 
    callback(null, uuidFromBytes(rnd)); 
    }); 
} 

function uuidFromBytes(rnd) { 
    rnd[6] = (rnd[6] & 0x0f) | 0x40; 
    rnd[8] = (rnd[8] & 0x3f) | 0x80; 
    rnd = rnd.toString('hex').match(/(.{8})(.{4})(.{4})(.{4})(.{12})/); 
    rnd.shift(); 
    return rnd.join('-'); 
} 

npm의 UUID module을 사용할 수도 있습니다. 암호화 패키지는 브라우저 내 옵션이 아니지만 Browserify's crypto shim을 사용할 수 있습니다.

관련 문제