检索时,使用crypto创建的Express js会话ID是不同的

时间:2014-06-13 20:37:12

标签: node.js session express cryptography

当尝试使用crypto randomBytes创建唯一的会话ID时,方法的结果和存储在cookie中的内容是两回事。如何使数据相同?这是一种制作会话ID的安全方法吗?

var crypto = require('crypto');
...
(In sign in post, create session)
  crypto.randomBytes(128, function(ex, buf) {
    console.log(buf); // 1
    req.session.myID  = buf;
    res.render('index');
    return;
  });

(Load another page)
  console.log(req.session.myID); // 2

第一个console.log:

  
    

`̓&LT; {Xн0=hPy'zς78yݶ&安培; /' - BJ” ܵێM_:Yvk ~~ R] X /&安培; * KC“aoΓ]1〜 - < / p>   

第二个console.log:

  
    

205,117,224,77,54,127,136,54,213,235,64,168,218,227,160,246,46,224,180,193,57,86,74,149,58,154,156,223,203,38,182,143,92,255,107,153,42,102,59,221,30,208,46,173,178,183,98,87,217,153,128,246,224,171,131,75,34,171,238,231,20,145,2,175,85,96,226,194 ,56,196,23,67,20,189,9,92,226,60,46,154,92,155,55,55,155,129,38,196,52,174,174,102,103,247,203,140,​​165,86,49,105,172,12,27,172,250,129,51,64,72,158,41,243,69,131,52,173,243,107,153,189,220,26,137,206,117,54,140,​​119

  

1 个答案:

答案 0 :(得分:0)

原因是会话数据存储为JSON。缓冲区实例的toJSON()JSON.stringify()自动调用。 buffer.toJSON()返回一个无符号数字数组,表示缓冲区中的字节值。

然而,当从会话存储中读回会话时,JSON.parse()不知道该数字数组实际上是一个缓冲区而不是其他东西,它只是保持原样。