为什么快速会话 cookie 作为第三方 cookie 被阻止

Dan*_*Dan 6 heroku node.js express cloudflare express-session

我正在使用express-session模块,它在本地主机上完美运行,但在我的网站上(使用Cloudflare托管在Heroku上),express会话被阻止为第三方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'
}));
Run Code Online (Sandbox Code Playgroud)

这是 Express 还是 Cloudflare/Heroku 的问题?

Ioa*_*nna 3

#为什么cookie被阻止

\n

来自whatis.techtarget.com

\n
\n

第三方 cookie是由用户访问的域以外的域中的网站\n放置在用户\xe2\x80\x99s 硬盘上的cookie 。

\n
\n

正如您在评论中提到的,您的客户端和服务器位于不同的域中:
\n www.castcrunch.com是我的客户端服务器的 URL,cast-crunch-server.herokuapp.com 是我的后端服务器 URL

\n

您可以在RFC 6265中阅读有关 cookie 域的更多信息:

\n
\n

Domain 属性指定 cookie 将发送到的主机。

\n
\n
\n

#你能做些什么

\n

正如这篇 dzone 文章中提到的,您可以使用Json Web 令牌进行身份验证。您的服务器将在登录响应正文中发送令牌,客户端将存储它并在每个后续请求标头中将其发送到服务器。

\n

这种方法的缺点是,由于您要存储令牌,因此很容易受到 XSS攻击。您必须特别注意这一点:清理所有输入,或者更好的是,使用已有的框架和语言。

\n

注意:当然,您也可以在浏览器设置中取消选中“阻止第 3 方 cookie”选项,但这似乎不是一个长期解决方案:)。

\n