Javascript 如何共享登录会话?

Javascript 如何共享登录会话?,javascript,node.js,security,session,cookies,Javascript,Node.js,Security,Session,Cookies,我一整天都在阅读有关会话的内容,我希望有人能清楚地解释我如何在app.example.io和example.io之间共享会话 子域在技术上是一个完全不同的域,它不仅仅是浏览器,因此您必须使用Access Control Allow Credentials标头并传递passport凭据 如果上面是真的,我是否应该停止像下面这样配置会话或cookie,而专注于将凭据从一个域传递到另一个域 // I have been trying to configure the domain property t

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

子域在技术上是一个完全不同的域,它不仅仅是浏览器,因此您必须使用Access Control Allow Credentials标头并传递passport凭据

如果上面是真的,我是否应该停止像下面这样配置会话或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
    }
}));
我已经尝试配置我的会话超过24小时了,我确信我需要传递凭据,所以如果这是真的,我的问题是如何传递已通过passport.js验证的凭据

My node.js服务器都使用一个express应用程序,子域来自npm子域模块,该模块将请求代理到子域/应用程序。因此,子域和域在服务器设置中是否共享同一会话


总而言之,我很困惑,如果有人能为我澄清一下,我会松一口气。

因此,经过一番深入的研究,我对这一点有了很大的了解

我注意到google analytics cookie适用于我的所有子域,因为在控制台中查看cookie时,cookie上的域只有一个句点。example.io查看我的express应用程序创建的cookie时,它看起来像app.example.io&example.io。很明显,我需要cookie域看起来像.example.io

下面是我发现的最适用于此的会话代码

app.use(session({
  store: new RedisStore(), 
  key: 'example.sid', 
  secret: 'keyboard cat', 
  cookie:{ domain: '.example.io' }
}));
我几乎没有尝试过使用这个密钥,所以通过设置一个密钥,它看起来很有帮助,如果商店做了什么,我也会询问。但是在我的live server上,我安装了redis,并将其包含在我的项目中,不确定这是否有什么不同

还要注意cookie中的域集具有.example.io。这起作用了,我松了一口气,我将继续测试,以确保我没有被愚弄


希望这对别人有帮助

这样设置会话cookie的域就足够了。我不知道为什么它不起作用,我注意到的是为登录会话创建的特定cookie的名称是connect.sid,我在app.example.io上看到,example.io有一个connect.sid,app.example.io有一个单独的,app.example.io有可能在我的应用程序中单独创建会话。我们的目标显然是让一个用户登录到一侧,然后同时登录到两侧。我认为mongoStore是共享会话的关键组件,我会使用Redistore,但它有那么重要吗?这是否意味着为多个域创建一个会话?每个域是否都连接到与默认域相反的redis数据存储?