gpt4 book ai didi

node.js - 多个 NodeJS 服务器的多个 redis 实例

转载 作者:可可西里 更新时间:2023-11-01 11:23:45 24 4
gpt4 key购买 nike

经过一些研究,我得出结论,我可以在我的 CentOS 服务器上为我运行的每个 NodeJS 服务器运行多个 Redis 实例(我使用 Redis 来存储 session )。

我关注了these instructions并且两个实例都在两个不同的端口上正常运行。

在我的 NodeJS 服务器上,我按如下方式配置了 Redis:

import * as session from "express-session";

var RedisStore = require('connect-redis')(session);
var redis = require("redis").createClient();

app.use(session(
{
secret: secret,
store: new RedisStore({ host: 'localhost', port: 6379, client: redis }),
cookie: { maxAge: 12 * 3600000 },
resave: true, saveUninitialized: true
}
));

一个端口为 6379,另一个端口为 6380

我使用 req.session.regenerate 来注册一个 session 。

两个登录系统都可以完美地独立运行。但是,当我在一个应用程序上加载任何内容时,另一个应用程序的 session 将被删除(并且需要重新登录)。

我在这里错过了什么?

最佳答案

问题看起来像是 Express 中的“ session 存储”,而不是您对 Redis 的使用。

来自快车documentation:

NOTE be careful to generate unique IDs so your sessions do not conflict.

app.use(session({
genid: function(req) {
return genuuid() // use UUIDs for session IDs
},
secret: 'keyboard cat'
}))

名称:要在响应中设置(并在请求中读取)的 session ID cookie 的名称。

默认值为“connect.sid”。

特别是这个警告解释了你的问题:

Note if you have multiple apps running on the same hostname (this is just the name, i.e. localhost or 127.0.0.1; different schemes and ports do not name a different hostname), then you need to separate the session cookies from each other. The simplest method is to simply set different names per app.

关于node.js - 多个 NodeJS 服务器的多个 redis 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55124502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com