Node Express - req.cookies 和 req.session.cookie 之间的区别
Node Express - difference between req.cookies and req.session.cookie
我想找出 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 的服务器端会话。但我看不出你最终如何摆脱使用客户端数据。在某些时候,您必须依赖存储的客户端数据吗?
在我使用 Express 应用程序登录后,护照对象会填充一个用户字段,其中包含 MongoDB objectid。
passport: { user: 549290b8246f0e1408e48b13 } }
通常情况下,您将在为浏览器提供服务时使用 cookie。例外情况是通过 HTTP header 或 POST 参数令牌进行身份验证,这对于 API 请求更为典型。
您确实可以使用 cookie 在客户端或服务器端 session 进行操作,其中整个 session 数据都存储在前者的 cookie 中(并且不使用任何存储 server-side) 或 session 数据存储在 server-side 中(session ID 存储在 client-side cookie 中)。
req.cookies
仅包含 cookie 值,无论 cookie 是否与 session 相关。 req.session.cookie
包含 client-side session ID cookie 中使用的 Set-Cookie
参数。
我想找出 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 的服务器端会话。但我看不出你最终如何摆脱使用客户端数据。在某些时候,您必须依赖存储的客户端数据吗?
在我使用 Express 应用程序登录后,护照对象会填充一个用户字段,其中包含 MongoDB objectid。
passport: { user: 549290b8246f0e1408e48b13 } }
通常情况下,您将在为浏览器提供服务时使用 cookie。例外情况是通过 HTTP header 或 POST 参数令牌进行身份验证,这对于 API 请求更为典型。
您确实可以使用 cookie 在客户端或服务器端 session 进行操作,其中整个 session 数据都存储在前者的 cookie 中(并且不使用任何存储 server-side) 或 session 数据存储在 server-side 中(session ID 存储在 client-side cookie 中)。
req.cookies
仅包含 cookie 值,无论 cookie 是否与 session 相关。 req.session.cookie
包含 client-side session ID cookie 中使用的 Set-Cookie
参数。