我正在使用带有快速会话的Node JS。
此处回答的一个问题建议使用req.cookies ['connect.sid']获取会话ID。另一个答案建议我使用req.sessionID
当我比较两者时,req.cookies['connect.sid']
的字符串如下:
s:G1wOJoUAhhemRQqCs7dAGlMIk5ZGaJUg.z1 / HrHTfndRqKpXza8qWuwHLS067xrWfVgqTDDGYoos
req.sessionID具有如下字符串:
G1wOJoUAhhemRQqCs7dAGlMIk5ZGaJUg
如果第二个字符串是会话ID(G1wOJoUAhhemRQqCs7dAGlMIk5ZGaJUg
),那么connect.sid cookie中的其他信息是什么?
试图通过Google和其他网站寻找答案,但是没有运气。
谢谢
Darren
答案 0 :(得分:0)
express-session在服务器端存储所有会话信息。如果您使用的是sql数据库,则会有一个会话表,如下所示:
sid | sess | expire
R02GJn2GoyaqRyten1BEGbHa0XCbj529 | {"cookie": "originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"mybool":true,"userid":16}
这就是您问题的答案,并且简要说明了数据的含义,sessionID只是访问仅在服务器端可用的数据的(主)键。
现在,从您的问题来看,您似乎打算错误地使用快速会话。
要在您的Express服务器上使用express-session,您将像这样包含它:
const session = require('express-session');
app.use(session({
name : 'mycookie',
secret : 'mysecret',
saveUninitialized : false,
resave : true
}));
,此后进入所有后续路由的每个请求都将具有.session
属性。无论如何,您都不需要自己访问会话ID,中间件本身会根据store you used for express-session验证每个请求。
app.get('/givemeasession',function(req,res,next){
req.session.mybool = true;
req.session.somedata = 'mystring';
req.session.evenobjects = { data : 'somedata' };
res.send('Session set!');
});
app.get('/mysession',function(req,res,next){
res.send('My string is '+req.session.somedata+' and my object is '+JSON.stringify(req.session.evenobjects));
});
底线:您永远不需要自己访问cookie或对其进行任何处理,因为任何cookie身份验证都是由中间件自动处理的。