2016-06-21 62 views
9

我需要共享主域和所有子域之间的会话cookie。我有一个基于expressjs框架的两个服务的NodeJS:如何配置应用程序可用的子域cookie?

// 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饼干吗?

编辑:为@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 
     }) 
    })); 

是否足够或者我可以优化呢?

回答

6

基本上你需要两样东西:所有服务器上使用相同的设置(不只是Cookie设置,但所有的会话设置包括商店),并确保Cookie域配置点到站点之间的公共领域。

+0

所以我需要刚刚从'example.local'复制和粘贴设置'blog.example.local'? – Erik

+0

是的,就是这样。 – yeiniel

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,让您的会话数据,特别是如果应用程序在不同的服务器。 YOu将需要一个会话数据的中央存储,所有应用都可以访问。

+0

是的,我知道,我需要为会话分开存储,但现在我所有的子域驻留在同一台机器上。所以基本的问题是关于会话配置,但感谢指点! @Lalit Goswami回答什么? – Erik

+0

您的所有子域名不必位于同一台计算机上。只有会话正在集中存储。这些应用程序可以在任何数量的机器上。 此外,如何发送,如果子站点单独或主域名下处理的Set-Cookie会决定。 – mayankbatra

2

我觉得你饼干中间件属性应该是这样的,

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

blog.example.local

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

example.local

希望这项工作你。

+0

你确定吗?我读到,如果我需要共享所有常见域和子域的cookie,我需要使用'domain:“bexample.local”' – Erik

相关问题