我正在忙于建立一个包含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。
redid-cliMONITOR
saveUninitialized
任何帮助都会很棒。
我认为这只是一个cookie问题。浏览器未将会话Cookie发送回您的子域:您需要一个Leading。在域上。例如:
cookie: { domain: ".example.co.za", httpOnly: false }