当尝试使用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
答案 0 :(得分:0)
原因是会话数据存储为JSON。缓冲区实例的toJSON()
由JSON.stringify()
自动调用。 buffer.toJSON()
返回一个无符号数字数组,表示缓冲区中的字节值。
然而,当从会话存储中读回会话时,JSON.parse()
不知道该数字数组实际上是一个缓冲区而不是其他东西,它只是保持原样。