何时应在使用express-session时使用cookie-parser?

47

在大多数ExpressJs示例中,我发现使用cookie-parserexpress-session一起。

如果我可以在没有cookie-parser的情况下使用req.session.name访问会话数据,在什么情况(或收益)下应该使用cookie-parser

2个回答

120

对于未来会遇到这个问题的初学者,我提供一个最新的答案:

如官方描述的express-session中间件所述:express-session

自1.5.0版本以来,不再需要使用cookie-parser中间件使该模块正常运作。现在该模块直接读取和写入请求/响应中的cookie。如果此模块和cookie-parser的秘密不相同,则使用cookie-parser可能会导致问题。

因此,只需使用express-session中间件即可。祝您愉快。


根据Express的安全指南,express-session并不适用于生产环境,不应使用:https://expressjs.com/en/advanced/best-practice-security.html#use-cookies-securely - ViggoV
9
@ViggoV,我想你指的是这一行 By default, it uses in-memory storage and is not designed for a production environment?它并不是在说整个 express-session 不适合生产环境,而是关于不要在生产环境中使用默认的内存存储。与 express-session 一起使用与您的数据库兼容的会话存储来进行持久化 cookie 存储,这样一切都会很好。 - Max Yari
2
那么 cookie-parser 不能与 express-session 一起使用吗?如果我需要同时读取 cookie 和维护会话数据怎么办? - Benny
@Benny 我不确定它们是否会冲突。个人而言,我会检查一下 express-session 是否公开了会话读取 API/解析的 cookie。 - Max Yari
从express-session的主页上来看,如果两个模块之间的secret不同,它们似乎只会发生冲突-"如果此模块和cookie-parser之间的secret不同,使用cookie-parser可能会导致问题"。 - java-addict301

3
除了提供简单的 cookie 解析功能外,cookie-parser 中间件还可以启用签名 cookie ,使用可选的 secret 属性,其他中间件组件可以引用它们。
为什么需要使用签名 cookie?这个问题回答得很好。

4
看起来 https://github.com/expressjs/session 的文档表明它可以独立支持签名 cookie。我是否遗漏了什么? - ryanman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接