小编典典

跨节点应用程序共享Redis会话

redis

我正在忙于建立一个包含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
        }
}));

这三个应用程序的配置完全相同,并且它们都位于同一台服务器上。由于某些原因,会话未共享。我似乎记得几周前就已经共享了它们,现在一切都坏了-
我偷偷地怀疑,当我们将所有流量从HTTP移到HTTPS时,就会发生这种情况。这会中断会议吗?我试图打开“
httpOnly”,以防它限制了会话,但是没有运气。

我已经运行,redid-cliMONITOR并且该会话实际上是在登录时保存的(身份验证应用程序),但未被其他应用程序检索。当我转为saveUninitializedtrue时,保存请求来自所有3个应用程序-
这表明它们已连接到同一Redis Store。

任何帮助都会很棒。


阅读 341

收藏
2020-06-20

共1个答案

小编典典

我认为这只是一个cookie问题。浏览器未将会话Cookie发送回您的子域:您需要一个Leading。在域上。例如:

cookie: {
   domain: ".example.co.za",
   httpOnly: false
}
2020-06-20