我正忙于构建一个包含 3 个不同子域的平台 - example.com、auth.example.com 和 api.example.com。它们与在服务器的不同端口上运行的 3 个独立的 NodeJS 应用一起运行。
这是设置 session 的代码:
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 个应用的配置完全相同,并且它们位于同一台服务器上。由于某种原因, session 没有被共享。我似乎记得他们在几周前被共享,现在一切都坏了——我有一个偷偷摸摸的怀疑,当我们将所有流量从 HTTP 转移到 HTTPS 时,就会发生这种情况。这会打破 session 吗?我尝试关闭“httpOnly”以防它限制 session ,但没有成功。
我已经运行了 redid-cli MONITOR
并且 session 实际上是在登录时保存的(Auth App),但其他应用程序没有检索到。当我将 saveUninitialized
设置为 true 时,保存请求来自所有 3 个应用程序 - 这表明它们连接到同一个 Redis Store。
任何帮助都会很棒。
最佳答案
我认为这只是一个 cookie 问题。浏览器不会将 session cookie 发送回您的子域: 你需要一个领先的。在域上。例如:
cookie: {
domain: ".example.co.za",
httpOnly: false
}
如果这不起作用并且您遇到 AJAX 问题 see this post
关于node.js - 跨 Node 应用程序共享 Redis session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084033/