快速会话 - 在另一个选项卡上打开 link 后会话丢失

Express session - Session lost after opening a link on another tab

背景:

我有一个使用 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 网络或任何消息传递应用程序共享任何 link,并且任何人都单击该 link。他们将失去那里的会话,换句话说,这个人退出了应用程序。

似乎浏览器没有与新打开的选项卡共享当前 cookie 并生成一个新会话。

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

更新 1: 问题似乎与 WhatsApp 网络有关。当我们通过 WhatsApp 网络打开 link 时,我们会丢失会话

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

如果您将 strict 值设为 SameSite。如果您从另一台主机上的 link 打开网页,将导致 cookie 丢失。

来自 MDN:

Cookies will only be sent in a first-party context and not be sent along with requests initiated by third party websites.

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