在表达你设置的会话有点像这样:
app.use(express.session({
store: store({...}),
secret: 'topsecret'
}));
在阅读secret
的内容时,
我得到了这个:protects against session hijacking by checking the fingerprint
听起来非常像签名的Cookie:ensure that a value has not been tampered with. It's placed in a different object (req.signedCookies) to differentiate between the two
两者之间有区别吗?
我理解签名的cookie,使用cookie值+ secret创建hash并沿cookie中的值保存。通过这种方式,您可以了解Cookie值是否已被篡改。
答案 0 :(得分:1)
你是对的,秘密用于签署cookie,使其无法被篡改。您可以查看关于快速会话序列化cookie的source code:
function setcookie(res, name, val, secret, options) {
var signed = 's:' + signature.sign(val, secret);
var data = cookie.serialize(name, signed, options);
debug('set-cookie %s', data);
var prev = res.getHeader('set-cookie') || [];
var header = Array.isArray(prev) ? prev.concat(data) : [prev, data];
res.setHeader('set-cookie', header)
}
基本上是使用SHA-256
对其进行签名,生成32字节的哈希值。
还有unsigncookie
验证您的Cookie未被篡改。显然,它验证了上面用于签名的相同秘密:
function unsigncookie(val, secrets) {
for (var i = 0; i < secrets.length; i++) {
var result = signature.unsign(val, secrets[i]);
if (result !== false) {
return result;
}
}
return false;
}