问题描述
在 express 文档中,对 express-session 和 cookie-session 进行了区分。它说:
用户会话可以通过 cookie 以两种主要方式存储:在服务器上或在客户端上。这 [cookie-session] 模块将客户端上的会话数据存储在 cookie 中,而像 >express-session 这样的模块仅将客户端上的 >会话标识符存储在 cookie 中,并将会话 > 数据存储在服务器上,通常在 >一个数据库。
JWT 令牌不也只是将所有会话数据存储在 cookie 中吗?JWT 与 cookie-session 模块的区别是什么?
解决方法
express-session 和 cookie-session 的主要区别在于它们如何保存 cookie 会话数据。
express-session 中间件在服务器上存储会话数据;它只在 cookie 本身中保存会话 ID,而不是会话数据。默认情况下,它使用内存存储并且不是为生产环境设计的。在生产中,您需要设置一个可扩展的会话存储,如数据库。
相比之下,cookie-session 中间件实现了 cookie 支持的存储:它将整个会话序列化为 cookie,而不仅仅是会话密钥。仅在会话数据相对较小且易于编码为原始值(而不是对象)时使用它。
虽然 JWT 提供了一种在客户端而不是在服务器上维护会话状态的方法,但它只是一个令牌,其中包含包含用户、创建时间等(不应该是敏感的)的有效负载数据。 JWT 通常用于授权,通过 Authorization 头中的不记名令牌发送到服务器。使用cookie-session模块时,浏览器会在每次请求时自动将cookies发送到服务器,但在发出请求时需要将承载令牌显式添加到HTTP标头中。