12

我想处理低级别的会话。如何在 node.js 中生成会话 ID?

4

1 回答 1

25

目前尚不清楚您要实现什么,但是...会话 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()并检查它是否存在于数据库中。如果确实如此,您将再次调用它,依此类推。

编辑:让我发表评论:

  1. 最初我在Math.random()这里,有人担心这不是加密安全的。虽然这是真的,但我没有看到 OP 要求加密安全的解决方案。据我们所知,他可能不需要它,毕竟我们不知道他正在处理什么样的会话。最终我决定改变它,因为加密解决方案更安全,而且(大部分时间)它没有任何缺点。
  2. Uuid 是一个可接受的替代方案。我个人更喜欢 uuid4,因为它不会泄漏信息,但这并不重要。
  3. 生成任何类型的 id 所需的计算量不太重要,并且大部分时间(如果有的话)它将由数据库通信主导。除非您正在处理 pbkdf2 类型的算法。我不会用那个。但如果你是,那么你可能有你的理由。
于 2013-08-06T12:15:35.233 回答