除了会话ID,connect.sid cookie字符串中的其他信息是什么?

时间:2019-05-18 08:01:07

标签: node.js cookies session-cookies

我正在使用带有快速会话的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

1 个答案:

答案 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身份验证都是由中间件自动处理的。