对 nodejs(和 Passport 中间件)会话感到困惑

Confused about nodejs (and the Passport middleware) sessions

超级简单的问题,但我无法解决问题。

当使用 nodejs 会话时,会话是否存储在用户浏览器中?还是会话存储在服务器上?

例如,如果我使用 express-session 或 passport.session(),这些会话 cookie 存储在哪里?

fine manual 状态:

Note Session data is not saved in the cookie itself, just the session ID. Session data is stored server-side.

express-session 向浏览器发送一个 cookie(存储它),其中包含一个唯一的会话 ID。数据本身存储在服务器上(取决于您使用的会话存储,这可以在内存中,Redis,MongoDB,...)。

cookie 中的会话 ID 仅用作在会话存储中查找实际数据的键。

如@robertklep 所述,会话(以您使用它们的方式)存储在客户端上,但仅包含一个会话 ID。当您的请求到达 Web 服务器时,它会查找会话 ID 以从某种数据库/缓存中获取帐户,然后在请求生命周期的剩余部分使用它。

如果您有兴趣了解更多相关信息,您可能想看看我刚才制作的这个截屏视频,它完全涵盖了如何 cookie 工作,以及为什么 --以及如何安全地存储它们:https://www.youtube.com/watch?v=yvviEA1pOXw

此外,如果您希望构建一个不使用 'typical' 服务器端会话并使用现代客户端前端 Web 框架(例如 Angular.js / React.js / 等,您可能想调查 JSON Web 令牌 (JWT)。这些令牌允许您创建不需要在服务器上查找数据库的 'dumb' cookie,并且可以显着加快您的网络应用程序/API 服务:https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/

希望对您有所帮助!