【问题标题】:Express session - Session lost after opening a link on another tab快速会话 - 在另一个选项卡上打开链接后会话丢失
【发布时间】:2021-06-09 04:30:39
【问题描述】:

背景:

我有一个使用 express-session 进行会话管理的 nodejs 应用程序。最近我们对应用程序进行了安全检查,并开始使用安全 cookie。这是快速会话配置:

server.use(
    session({
        saveUninitialized: true,
        rolling: true,
        resave: true,
        proxy: true,
        secret: envConfig.sessionSecret,
        cookie: {
            maxAge: envConfig.sessionCookie.maxAge, 
            httpOnly: envConfig.sessionCookie.httpOnly, // was false before security checkup
            sameSite: true, // was false before security checkup
            secure: envConfig.sessionCookie.secure // was false before security checkup
        },
        name: envConfig.sessionKey,
        store: new MongoDBStore({
            uri: envConfig.sessMongoDB.uri,
            collection: envConfig.sessMongoDB.collection,
            expires: envConfig.sessMongoDB.expires,
            connectionOptions: {
                useNewUrlParser: true,
                useUnifiedTopology: true
            }
        })
    })
);

问题:

问题从这里开始。此会话管理运行良好且稳定。但是,如果我们通过邮件或 whatsapp 网络或任何消息传递应用程序共享任何链接,并且任何人点击该链接。他们将失去会话,换句话说,该人将从应用程序中退出。

浏览器似乎没有与新打开的标签共享当前 cookie 并生成新会话。

以前有没有人遇到过这个问题,我们该如何解决这个问题?

更新 1: 似乎问题出在 WhatsApp 网络上。当我们通过 WhatsApp 网页打开链接时,我们会丢失会话

【问题讨论】:

    标签: javascript node.js express express-session


    【解决方案1】:

    我在发布此问题 1 天后设法解决了此问题。我忘了分享。问题与 cookie SameSite 政策有关。

    如果您将strict 值设置为SameSite。如果您从另一个主机上的链接打开网页,则会导致 cookie 松动。

    来自 MDN:

    Cookie 只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送。

    更多信息可以在这里找到: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多