我正忙着搭建一个有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时发生了这种情况。这会中断会话吗?我试图关闭“httpOnly”,以防它限制会话,但没有成功。
我已经运行了redid-cli MONITOR,实际上,会话是在登录(Auth App)时保存的,但没有被其他应用程序检索到。当我将saveUninitialized设置为true时,保存的请求来自所有3个应用程序--这表明它们连接到同一个Redis Store。
任何帮助都是最好的。
发布于 2016-08-23 00:16:22
我想这只是个小问题。浏览器不会将会话cookie发送回您的子域:您需要一个引导。在域上。例如:
cookie: {
domain: ".example.co.za",
httpOnly: false
}如果这样做不起作用,并且您遇到了AJAX问题,see this post
https://stackoverflow.com/questions/39084033
复制相似问题