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

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

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

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: {} } 

我正在使用这个configuration:

 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的服务器端会话。 但是我不明白如何才能避免使用客户端数据。 在某个时候,你必须依赖于存储的客户端数据吗?

在我使用快速应用程序login后,护照对象会填充一个用户字段,并且MongoDB将被拒绝。

 passport: { user: 549290b8246f0e1408e48b13 } } 

通常,您在使用浏览器时将使用Cookie。 例外情况是通过HTTP头或POST参数令牌进行validation,例如API请求更为典型。

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

req.cookies只包含cookie值,不pipecookies是否与session有关。 req.session.cookie包含客户端会话ID cookie中使用的Set-Cookie参数。