我正在忙着构建一个包含3个不同子域的平台 - example.com,auth.example.com和api.example.com。他们使用在服务器的不同端口上运行的3个独立的NodeJS应用程序运行。
以下是设置会话的代码:
var session = require("express-session");
var redisStore = require("connect-redis")(session);
var redisClient = require("redis").createClient(config.redis);
app.use(session({
secret: config.server.secret,
store: new redisStore(config.redis),
client: redisClient,
resave: false,
saveUninitialized: false,
cookie: {
domain: "example.co.za",
httpOnly: false
}
}));
所有3个应用的配置完全相同,并且它们位于同一台服务器上。出于某种原因,会议未被分享。我似乎记得几个星期前他们被分享了,现在事情已经破裂了 - 我有一种偷偷摸摸的怀疑,当我们将所有流量从HTTP移动到HTTPS时就发生了这种情况。这会打破会议吗?我试图转过来#http;如果它限制了会话,但没有运气。
我已经运行redid-cli MONITOR
,事实上,会话在登录时保存(Auth App),但其他应用程序未检索到。当我将saveUninitialized
设置为true时,保存请求来自所有3个应用 - 这表明它们已连接到同一个Redis商店。
任何帮助都会很棒。
答案 0 :(得分:0)
我认为这只是一个cookie问题。浏览器不会在您的子域上发回会话cookie: 你需要领先。在域上。 e.g:
cookie: {
domain: ".example.co.za",
httpOnly: false
}
如果不起作用且您遇到AJAX问题see this post