除了会话 ID 之外,connect.sid cookie 字符串中还有哪些附加信息?

Daz*_*Daz 5 cookies session-cookies node.js

我正在将 Node JS 与 Express-Session 一起使用。

这里回答的一个问题建议使用 req.cookies['connect.sid'] 来获取会话 ID。另一个答案建议我使用 req.sessionID

当我比较两者时,req.cookies['connect.sid']有一个如下所示的字符串:

s:G1wOJoUAhhemRQqCs7dAGlMIk5ZGaJUg.z1/HrHTfndRqKpXza8qWuwHLS067xrWfVgqTDDGYoos

req.sessionID 具有如下所示的字符串:

G1wOJoUAhhemRQqCs7dAGlMIk5ZGaJUg

如果第二个字符串是会话 ID ( G1wOJoUAhhemRQqCs7dAGlMIk5ZGaJUg),那么 connect.sid cookie 中的其他信息是什么?

尝试通过谷歌和其他网站寻找答案,但没有成功。

谢谢,

达伦

Zee*_*Zee 7

express-session 存储服务器端的所有会话信息。如果您使用 SQL 数据库,您将有一个会话表,如下所示:

             sid                 |      sess       |     expire
R02GJn2GoyaqRyten1BEGbHa0XCbj529 | {"cookie": "originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"mybool":true,"userid":16}
Run Code Online (Sandbox Code Playgroud)

这就是您问题的答案,也是对数据含义的简短解释,sessionID 只是访问仅在服务器端可用的数据的(主)键。

现在从您的问题来看,您似乎计划错误地使用快速会话。

要在 Express 服务器上使用 Express-Session,您可以像这样包含它:

const session = require('express-session');
app.use(session({
    name : 'mycookie',
    secret : 'mysecret',
    saveUninitialized : false,
    resave : true
}));
Run Code Online (Sandbox Code Playgroud)

此后进入所有后续路由的每个请求都将具有一个.session属性。无论如何,您永远不需要自己访问会话 ID,中间件本身会针对您用于 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));
});
Run Code Online (Sandbox Code Playgroud)

底线:您不需要自己访问 cookie 或对其执行任何操作,因为任何 cookie 身份验证都会由中间件自动处理。

  • 当然,谢谢。不,我没有错误地使用快速会话,我只是试图在数据库中存储唯一的会话信息,以提供更多的报告选项,并且想知道我应该达到什么程度。你回答了。 (2认同)