Node Express - req.cookies 和 req.session.cookie 之间的区别

Node Express - difference between req.cookies and req.session.cookie

我想找出 req.cookies 和 req.session.cookie 之间的区别。我在 Node.js Express 中使用 Passport 进行身份验证。

如果我在我的代码中记录这两行:

 console.log('cookies',req.cookies);
 console.log('session',req.session);

我得到这个输出:

cookies { 'mysite.sid.uid.whatever': 's:Ltko5IdDgsAISG0smrKNYaeIVy8nbBzF.MkGmpnf6uUKITIAgN4ws3YXqxJrMaeeSCzlKdjQnqfI' }
session { cookie: 
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true,
     secure: false },
  views: 8,
  passport: {} }

我正在使用这个配置:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(busboyBodyParser());
//app.use(busboy());
app.use(cookieParser('cookie parser secret'));
app.use(session({
    secret: process.env["SESSION_SECRET"],
    saveUninitialized: true, // (default: true)
    resave: true, // (default: true)
    store: require('mongoose-session')(mongoose),
    maxAge: 60000,
    key: "mysite.sid.uid.whatever",
    cookie: {secure: false}
}));

我真的不知道使用会话或 cookie 之间的区别,只是 cookie 仅用于客户端,而会话可以是客户端或服务器端。我已经阅读了几次 Passport.js 的文档,但我仍然不太明白这里发生了什么。有人可以帮我解释一下吗?据我所知,似乎最好使用使用 Redis 的服务器端会话。但我看不出你最终如何摆脱使用客户端数据。在某些时候,您必须依赖存储的客户端数据吗?

在我使用 Express 应用程序登录后,护照对象会填充一个用户字段,其中包含 MongoDB objectid。

passport: { user: 549290b8246f0e1408e48b13 } }

通常情况下,您将在为浏览器提供服务时使用 cookie。例外情况是通过 HTTP header 或 POST 参数令牌进行身份验证,这对于 API 请求更为典型。

您确实可以使用 cookie 在客户端或服务器端 session 进行操作,其中整个 session 数据都存储在前者的 cookie 中(并且不使用任何存储 server-side) 或 session 数据存储在 server-side 中(session ID 存储在 client-side cookie 中)。

req.cookies 仅包含 cookie 值,无论 cookie 是否与 session 相关。 req.session.cookie 包含 client-side session ID cookie 中使用的 Set-Cookie 参数。