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

时间:2017-02-16 04:14:34

标签: node.js express heroku cloudflare express-session

我正在使用快速会话模块,它在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的问题吗?

1 个答案:

答案 0 :(得分:0)

为什么Cookie被阻止

来自whatis.techtarget.com

  

第三方Cookie 是由第三方Cookie放置在用户硬盘上的   来自用户访问的域之外的域

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

您可以在RFC 6265中了解有关Cookie域的更多信息:

  

“域”属性指定将向其发送Cookie的那些主机。


您可以做什么

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

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

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