2014-10-14 3 views
4

Im пытается узнать Node.js без использования сторонних модулей или фреймворков. Я добираюсь до такой степени, что мне нужно выяснить, как давать идентификаторы сессии пользователям, которые заходят в систему ...Как создать идентификатор сеанса в Node.js?

До сих пор я знаю, что могу установить идентификатор сеанса, записав его в заголовках, установив файлы cookie:

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

, а затем я могу получить идентификатор сеанса, а затем сравнить его с базой данных.

request.headers.cookie(request.url); 

Но как я могу генерировать значение идентификатора сеанса? Я новичок в программировании. Первое, о чем я думал, это использование Javascript's Math.random(); и использовать это значение для установки файла cookie (идентификатор сеанса). По-моему, это глупо, но это то, насколько я могу думать.

Как я могу сгенерировать идентификатор сеанса с помощью Node.js, без сторонних модулей, баребоны, пожалуйста!

+0

Это хороший вопрос ... просто будьте осторожны, что есть серьезные последствия для безопасности того, как вы обрабатываете идентификаторы сеансов в файлах cookie. Независимо от того, что вы делаете, не реализуйте то, что вы строите в производстве. Существует тонна хорошо проверенного готового кода, который вы можете использовать. Теперь вы можете сгенерировать свой идентификатор сеанса, как хотите. На самом деле это не вопрос Node.js. Это наилучшая практика и JavaScript-вопрос. – Brad

ответ

3

Примечание: вам, вероятно, следует использовать диспетчер сеансов для любых фреймворков, с которыми вы работаете. Будь то соединение, экспресс, koa или любое количество других.


Это даст вам UUID version 4 (random) с помощью crypto.randomBytes.

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('-'); 
} 

Вы также можете использовать UUID module от npm. Crypto-пакет не является опцией в браузере, хотя вы можете использовать Browserify's crypto shim.

Смежные вопросы