背景:
我有一个nodejs应用程序,使用express会话进行会话管理。最近,我们对该应用程序进行了安全检查,并开始使用安全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网页打开链接时,我们丢失了会话
我在发布这个问题一天后设法解决了这个问题。我忘了分享。该问题与CookieSameSite
策略有关。
如果将strict
值设置为SameSite
。如果你从另一台主机上的链接打开网页,就会导致cookie丢失。
来自MDN:
Cookies仅在第一方上下文中发送,不会与第三方网站发起的请求一起发送。
可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite