【发布时间】:2019-09-23 13:01:32
【问题描述】:
我想处理低级别的会话。如何在 node.js 中生成会话 ID?
【问题讨论】:
我想处理低级别的会话。如何在 node.js 中生成会话 ID?
【问题讨论】:
目前尚不清楚您要达到什么目的,但是...会话 ID 只是一个 ID!您可以根据需要生成它。除了唯一性之外,没有其他要求。不过,让它安全是个好主意。例如,此函数可能是您的会话 id 生成器:
var crypto = require('crypto');
var generate_key = function() {
// 16 bytes is likely to be more than enough,
// but you may tweak it to your needs
return crypto.randomBytes(16).toString('base64');
};
您调用generate_key() 并检查它是否存在于数据库中。如果是,你再调用一次,依此类推。
编辑:让我谈谈 cmets:
Math.random(),有人担心这不是加密安全的。虽然这是真的,但我没有看到 OP 要求加密安全的解决方案。据我们所知,他可能不需要它,毕竟我们不知道他正在处理什么样的会话。最终我决定改变它,因为加密解决方案更安全,而且(大部分时间)它没有任何缺点。【讨论】:
Math.Random is seeded from the current time 因此它是可预测的,攻击者可以使用它来预测用户的会话 ID。