我试图找出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使用服务器端会话。但我不知道如何最终摆脱使用客户端数据。在某些时候,你必须依赖存储的客户端数据吗?
在我使用快速应用程序登录后,护照对象将填充一个用户字段,并且MongoDB是objectid。
passport: { user: 549290b8246f0e1408e48b13 } }
答案 0 :(得分:1)
通常,您在使用浏览器时会使用Cookie。例外情况是通过HTTP头或POST参数令牌进行身份验证,例如,对于API请求更为典型。
确实可以使用cookie进行客户端或服务器端会话,其中整个会话数据存储在前者的cookie中(并且不使用任何存储服务器端)或会话数据存储在服务器端(后面有一个存储在客户端cookie中的会话ID)。
req.cookies
仅包含Cookie值,无论Cookie是否与会话相关。 req.session.cookie
包含客户端会话ID cookie中使用的Set-Cookie
个参数。