我需要在主域和所有子域之间共享会话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
})
}));
是否足够或我可以优化它?
答案 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来保留会话数据,特别是如果应用程序位于不同的服务器上。你需要一个会话数据的中央存储空间,所有应用都可以访问。