快速会话 - 在另一个选项卡上打开 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
背景:
我有一个使用 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