我试图找出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
参数。