快速会话 cookie 存储在哪里?

问题描述 投票:0回答:1

我使用express-session来存储与用户会话相关的数据,例如登录状态和access_tokens。 我还使用 connect-session-sequelize 为会话创建存储,因此与 cookie 相关的信息将保存到连接的表中。 但是,我的问题是,即使我没有向会话表添加额外的列来说明我存储的额外数据(例如登录状态和令牌),它们仍然能够通过重新启动 Express 服务器来保留。

app.use( session( {
    secret: SESSION_KEY,
    resave: false,
    saveUninitialized: false,
    store: new sequelizeStore( {
        db: db.sequelize,
        table: 'sessions'
    } ),
    cookie: {
        secure: true,
        maxAge: 600000
    }
} ) );

请注意,在上面的代码中,我保留默认表而不扩展它,因此它只有 sid、expires 和 data 列,这些列在为用户生成会话时保存。

app.get( '/auth', async ( req, res ) => {

    if ( !req.session.loggedIn ) {

        //Login here and obtain Oauth2 tokens
        req.session.loggedIn = true;
        req.session.access_token = access_token;
        req.session.save();
        res.redirect( `https://localhost/servers` );

    } else {

        res.redirect( `https://localhost/servers` );
    
    }

} );

在上面的代码中,当访问身份验证端点时,它会检查会话是否已登录,如果没有,它会尝试登录并为会话进行设置,否则它将重定向到服务器页面。 LoggedIn 会话变量未保存到表中,但是当我点击该端点以登录会话然后重新启动 Express 服务器时,尽管没有保存到表中,会话变量 LoggedIn 仍然存在。 怎么会这样呢? 会话是否存储在其他地方?

express session-cookies express-session cookiestore
1个回答
0
投票

您不需要向会话表添加列,因为会话数据在存储到数据库时会序列化为 JSON(在大多数情况下),包括添加到其中的任何自定义字段。

当服务器从存储中提取会话时,它会被反序列化,您可以访问这些自定义字段。

请注意,如果您使用 connect-session-sequelize,您可以选择配置 extendDefaultFields,这会影响您通过这些特定字段查询会话数据的能力,但为了将自定义字段存储为一部分,这不是必需的会话数据对象的。

© www.soinside.com 2019 - 2024. All rights reserved.