如何配置应用程序可用的子域cookie?

时间:2016-06-21 22:10:12

标签: node.js express cookies subdomain

我需要在主域和所有子域之间共享会话cookie。我有两个基于expressjs框架的nodejs服务:

// example.local

    ...
    app.use(session({
       cookie: {
          domain: "example.local"
       }
       , key: 'sid'
       , secret: '[my secret]'
       , saveUninitialized: true
       , resave: true
       , store: new RedisStore({
          host: 'localhost',
          port: 6379
       })
    })); 

// blog.example.local

    ...
    app.use(session({
       // what should I write here? <---------
    })); 

所以我的问题是我应该在blog.example.local的会话配置中写什么才能访问example.local的现有Cookie?

编辑:正如@yeiniel建议的那样,我应该使用blog.example.local的相同配置,如下所示:

// blog.example.local

    ...
    app.use(session({
       cookie: {
          domain: "example.local"
       }
       , key: 'sid'
       , secret: '[my secret]'
       , saveUninitialized: true
       , resave: true
       , store: new RedisStore({
          host: 'localhost',
          port: 6379
       })
    })); 

是否足够或我可以优化它?

3 个答案:

答案 0 :(得分:6)

基本上你需要两件事:在所有服务器上使用相同的设置(不只是cookie设置,但所有会话设置都包括商店),并确保cookie域配置指向站点之间的公共域。

答案 1 :(得分:2)

我认为中间件中的 cookie 属性应该是这样的,

cookie: {
      domain: ".example.local",
      path:'/'
}

blog.example.local

cookie: {
      domain: "example.local",
      path:'/'
}

example.local

希望这对你有用。

答案 2 :(得分:1)

我目前正在管理类似的设置 所有应用都具有相同的会话设置

app.use(session({
store: redisStore,
secret: config.secret,
resave: true,
rolling: true,
saveUninitialized: false,
name: config.cookie_name,
cookie: {
  domain: config.cookie_domain_name, \\ .website.tld
  secure: false
}

您将无法使用localhost来保留会话数据,特别是如果应用程序位于不同的服务器上。你需要一个会话数据的中央存储空间,所有应用都可以访问。