Node.js 同时使用cookieParser()和cookieSession()?
Node.js 同时使用cookieParser()和cookieSession()?,node.js,cookies,express,Node.js,Cookies,Express,cookieParser()为我们提供了使用秘密语句对cookie签名的选项,这对于防止篡改非常有用。我知道cookie是用特殊值签名的,以防止篡改 我刚刚发现了cookieSession(),我发现它是服务器存储cookie的一个很好的替代品(我只存储{loggedIn=true,userId=763487246824632},它从不增长) 但是。。。我发现为cookieParser()设置“secret”会破坏一切,如果secret语句匹配,cookieSession()就会停止工作。 原因
cookieParser()
为我们提供了使用秘密语句对cookie签名的选项,这对于防止篡改非常有用。我知道cookie是用特殊值签名的,以防止篡改
我刚刚发现了cookieSession(),我发现它是服务器存储cookie的一个很好的替代品(我只存储{loggedIn=true,userId=763487246824632}
,它从不增长)
但是。。。我发现为cookieParser()设置“secret”会破坏一切,如果secret语句匹配,cookieSession()就会停止工作。
原因似乎是,如果cookie是使用相同的秘密签名的,那么cookieParser()实际上会接受并解析它。奇怪的是,一旦cookieParser()完成了它的工作,并且具有相同的签名秘密,会话就被设置为:
{ cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true } }
而不是:
{ testing: 'OOO' }
(每次重新加载都会添加一个“o”)
所以
- 我的分析正确吗
- 你知道为什么会话被设置为奇怪的
对象(如果秘密语句匹配){cookie
美塞苔丝。你的分析是正确的,我可以复制它 该问题是由
cookieSession
中间件(某些上下文:options.secret
是传递给cookieSession
的密钥,req.secret
是传递给CookieSparser
的密钥)引起的:如果向两个中间件传递一个密钥,cookieSession
假定它将找到原始(未解析)密钥请求cookie中的cookie
但是由于cookieParser
也提取了已签名的cookie(并且它在cookieSession
之前运行),它已经解析了cookie本身(并且由于签名密钥相同,它成功地这样做了),将其存储在req.signedCookies
中,并将其从req.cookies
中删除。就cookieSession
而言,cookie只是没有设置
您看到的对象是默认会话内容(这是cookieSession
配置中的cookie
属性):
app.use(express.cookieSession)({
cookie:{//这是一个多么奇妙、全面的答案。我知道这是一个相当利基的问题,但它值得+1-谢谢!
app.use(express.cookieSession({
cookie : { // <-- this object
...
}
});