如何共享登录会话?

How to share log in sessions?

我整天都在阅读有关 session 的内容,我希望有人能清楚地解释我如何在 app.example.io 和 example.io[= 之间共享 session 12=]

子域在技术上是一个完全不同的域,它不仅仅是浏览器,所以你必须使用 Access-Control-Allow-Credentials header 并传递护照凭证

以上是否属实,我是否应该不再担心配置我的 session 或如下所示的 cookie,而是专注于将凭据从一个域传递到另一个域?

// I have been trying to configure the domain property to no avail
app.use(cookieSession({ 
    key: 'example.sid',
    secret: 'something',
    cookie: {
        path: '/',
        domain: '.example.io',
        maxAge: 1000
    }
}));

我已尝试配置我的 session 超过 24 小时,我确信我需要传递凭据,所以如果这是真的,我的问题是如何传递已通过 passport.js?

我的 node.js 服务器都在使用一个 express 应用程序,子域来自代理请求到 subdomain/app 的 npm 子域模块。因此,子域和域在技术上确实在服务器设置中共享相同的 session?

总而言之,我很困惑,如果有人能为我澄清一下,我会感到欣慰。

所以经过一番深入的研究,我的大部分时间都在思考这个问题。

我注意到 google 分析 cookie 适用于我所有的子域,因为在控制台中查看 cookie 上的域时,在查看我的 express cookie 时只有一个句点 .example.io应用正在创建看起来像 app.example.io & example.io。所以显然我需要 cookie 域看起来像 .example.io 两个域。

我发现最适合此操作的会话代码如下。

app.use(session({
  store: new RedisStore(), 
  key: 'example.sid', 
  secret: 'keyboard cat', 
  cookie:{ domain: '.example.io' }
}));

我几乎没有尝试使用 key 所以通过设置一个密钥它看起来有帮助,如果商店有任何事情也可以使用 IDK,但是在我的实时服务器上我安装了 redis 并将它包含在我的项目中,而不是确定这是否有所作为。

另请注意 cookie 中设置的域具有 .example.io。这个成功了,我松了一口气,我会继续测试以确保我没有被愚弄。

希望这对某人有所帮助!