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



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

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

 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应用程序登录后,Passport对象会填充一个用户字段,其中包含MongoDB objectID。

passport: { user: 549290b8246f0e1408e48b13 } }

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

确实,您可以使用 cookie 进行客户端或服务器端会话,其中整个会话数据存储在前者的 cookie 中(并且不使用任何存储服务器端),会话数据存储在服务器端(会话 ID 存储在客户端 cookie 中)在后者中。

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

最新更新