我正在使用快速会话模块,它在localhost上完美运行但在我的网站上(使用Cloudflare在Heroku上托管),快速会话被阻止为第三方cookie。这是我的会话的配置:
app.use(session({
resave: false,
saveUninitialized: false,
proxy : true,
cookie: {
maxAge: 3600000000000,
httpOnly: false,
secure: false,
domain: '.mydomain.com',
path: '/'
},
store: sessionStore,
secret: 'mysecret',
unset: 'destroy'
}));
这是Express或者Cloudflare / Heroku的问题吗?
第三方cookie是由网站从用户正在访问的域以外的域放置在用户的硬盘上的cookie。
正如您在评论中提到的,您的客户端和服务器位于不同的域中: www.castcrunch.com是我的客户端服务器的URL和cast-crunch-server.herokuapp.com是我的后端服务器URL
您可以在RFC 6265中阅读有关cookie域的更多信息:
Domain属性指定将向其发送cookie的主机。
如this dzone article中所述,您可以使用Json Web Tokens进行身份验证。您的服务器将在登录响应主体中发送令牌,客户端将其存储并在每个后续请求头中将其发送到服务器。
这种方法的缺点是,因为您正在存储令牌,所以您将容易受到XSS攻击。您必须特别注意:清理所有输入,或者更好的是,使用已经完成的框架和语言。
注意:当然,您也可以在浏览器设置中取消选中“阻止第三方Cookie”选项,但这似乎不是长期解决方案:)。