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
    ...
  }
});