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

时间:2015-01-06 05:58:31

标签: node.js session cookies passport.js

我试图找出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 } }

1 个答案:

答案 0 :(得分:1)

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

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

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