gpt4 book ai didi

node.js - 一起使用 cookieParser() 和 cookieSession()?

转载 作者:搜寻专家 更新时间:2023-10-31 22:28:11 25 4
gpt4 key购买 nike

cookieParser() 为我们提供了使用密文对 cookie 进行签名的选项,这对于防止篡改非常有用。我知道 cookie 是用特殊值签名的,以防止篡改。

我刚刚发现 cookieSession(),我发现它是服务器存储 cookie 的伟大替代品(我只存储 { loggedIn = true, userId=763487246824632} ,它永远不会增长)。

但是...我发现为 cookieParser() 设置一个“ secret ”会破坏事情,并且 cookieSession() 停止工作如果 secret 句子匹配。原因似乎是,如果使用相同的 secret 对 cookie 进行签名,则 cookieParser() 实际上会获取并解析它。奇怪的是,一旦 cookieParser() 完成它的工作,并且使用相同的签名 secret , session 将设置为:

{ cookie: 
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true } }

而不是:

{ testing: 'OOO' }

(每次重新加载都会添加一个'o')所以……

  • 我的分析是否正确?
  • 你知道为什么如果 secret 句子匹配, session 会设置为那个奇怪的 { cookie 对象吗?

雇佣兵。

最佳答案

你的分析是正确的,我可以重现。

问题是由 this line 引起的在 cookieSession 中间件中(某些上下文:options.secret 是传递给 cookieSession 的 key ,req.secret 是传递给 cookieParser 的 key ):如果您向两个中间件传递一个 key ,cookieSession 假定它将在 req.cookies< 中找到原始(未解析的)cookie/.

但由于 cookieParser 也获取了已签名的 cookie(并且它在 cookieSession 之前运行),它已经解析了 cookie 本身(并且因为签名 key 是同样,它成功了),将其存储在 req.signedCookies 中,并从 req.cookies 中删除。所以就 cookieSession 而言,cookie 只是没有设置。

您看到的对象是默认 session 内容(即 cookieSession 配置中的 cookie 属性):

app.use(express.cookieSession({
cookie : { // <-- this object
...
}
});

至于解决方案:要么对每个中间件使用不同的 key ,要么只将其中一个传递给您的 key ,但不能同时传递两者(如果您将它传递给 cookieParser,< em>所有您的 cookie 都将被签名)。

FWIW:我不完全确定这是否是一个真正的错误。这是对 cookieParsercookieSession 使用相同签名机制的结果,由一个或另一个签名的 cookie 之间没有区别。尽管可以通过始终检查 cookie 是否位于 req.signedCookies 中来解决这个问题。

关于node.js - 一起使用 cookieParser() 和 cookieSession()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16475284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com