node.js - 跨 Node 应用程序共享 Redis session

标签 node.js session redis

我正忙于构建一个包含 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/

相关文章:

javascript - 在 node.js 中使用 stripe 实现 ach

java - Spring MVC,使用基于类的代理的作用域 Controller : 'There is already scopedTarget bean method.'

mysql - 每个 python\django 进程的单个 MySQL session

node.js - 在单独的文件中对 Mongoose 模型进行单元测试会导致问题(使用 Mockgoose 和 Lab)

node.js - 尝试安装 BadgeKit 依赖项时出现错误

node.js - NodeJS - 安全连接到外部 redis 服务器

Redis 作为服务失败,错误代码为 87

lua - 在redis中存储和使用lua脚本

javascript - Node.js中的模块IO

java - 使用 Web 服务时如何管理用户 session ?