使用MEAN环境(使用express 4),我创建了一个像这样的cookie。
//webserver.js
app.use(cookieParser(„somesecretkey“));
//somescript.js
res.cookie(‚testcookie‘, ‚testvalue', {signed: true, maxAge: 999999, httpOnly: true});
在另一个脚本中,我尝试像这样检查cookie的存在。
//someotherscript.js
if(req.cookies.testcookie){
console.log("COOKIE EXISTS“+req.cookies.testcookie);
}else{
console.log(„NO COOKIE“+req.cookies.testcookie); //always undefined
}
我在浏览器中检查了cookie,它确实存在,但是当我按下刷新或只是访问页面时,控制台会记录没有cookie(cookie未定义)。只要我将cookie更改为unsigned并删除密钥,我就可以访问它!?为什么一旦签名就找不到cookie?
答案 0 :(得分:0)
expressjs documentation for res.cookie告诉我们:
使用cookie-parser中间件时,此方法也支持signed 饼干。只需将
array([[ 1., 1., 1., ..., 1., 1., 1.], [ 1., 1., 1., ..., 1., 1., 1.], [ 1., 1., 1., ..., 1., 1., 1.], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]])
选项设置为signed
即可。然后true
将使用传递给res.cookie()
的秘密 签署价值。cookieParser(secret)
稍后您可以通过req.signedCookie对象访问此值。
所以:
res.cookie('name', 'tobi', { signed: true });
确定了一个秘密?cookieParser
中的Cookie,而不是req.signedCookie