我有一个快速会话设置为使用存储在数据库中的cookie。这在firefox中工作得很好,但是它似乎从来没有保存过cookie,所以客户端从来没有反映过会话。
app.use(expressSession({
secret: data[0],
cookie: {
httpOnly: false,
secure: true,
maxAge: 14 * 24 * 60 * 60 * 1000, //14 days
},
store: new connectMongo({mongooseConnection: mongoose.connection}),
resave: false,
saveUninitialized: false,
}));
在Firefox中,它肯定会将cookie保存为connect.sid,并在页面加载之间保存数据:
在chrome中,它保存了一些我的浏览器端设置的cookie,比如analytics和我用JavaScript做的cookie,但是connect.sid从来没有保存过。
编辑:所以我发现它与secure: true
有关,但如果没有必要,我不想禁用它。
我以为它与xhr.withCredentials有关,但似乎没有解决它,加上页面上说,它不影响相同的网站请求,我的总是。
2条答案
按热度按时间brtdzjyr1#
不知道你在哪里托管你的服务器,但在遇到类似的问题后,你可以使用下面的行,它可能是你的服务器托管在像heroku这样的地方,按照这个其他堆栈溢出线程PassportJS callback switch between http and https
jhkqcmku2#
我遇到了同样的问题,因为cookie在部署时没有保存。如果您的后端服务器和前端应用托管在不同的域,即IP不同,在firefox上工作的原因,如果sameSite属性值未提供,但允许浏览器设置cookie****跨域上下文,仍然显示警告。然而,在所有基于chromium的应用中,如果在跨域上下文的cookie中未提供sameSite属性值,则cookie不是在浏览器中设置或保存**,从而这些cookie不是连同请求一起发送到服务器以获取用户的数据。
sameSite:'none'
,该sameSite:'none'
表示cookie是否 * 打算用于跨站点上下文**。'none'
时,Secure属性必须设置为truesecure: true
。为了保护用户数据不被跨站请求伪造,大多数浏览器都采用了策略,该策略将防止您的cookie被保存**。更多信息查看文档secure: true
,则需要在express中设置**“trust proxy”**: