我完全知道,通常情况下,在使用快速会话时,每个请求都会返回会话,因此没有必要尝试管理会话。然而,想象一下,您有多个应用程序,每个应用程序都有不同的作业,但是您希望您的身份验证能够与所有应用程序一起工作。所以问题是,在一个应用程序上创建的会话不会神奇地复制到所有其他应用程序上。
那你要做什么?想必,您需要查询创建会话的应用程序,并使用它的ID获取会话,并通过本地存储将会话ID存储在客户机上。
我找不到任何能够支持这种架构的东西(微型应用程序而不是单一软件)。
在快速会话的自述文件中,有一些文档说明了它们的存储,但没有解释如何使用它。例如,它声明您可以获得这样的会话:store.get(sid, callback),唯一可用的存储是一个名为" store“的类。在文档中没有明确指出如何获得/使用这个信息。
文档接着谈到了一些关于“兼容会话存储”的内容。这是否意味着快速会话没有自己的商店,在这个自述文件中他们想说什么?它非常神秘,可以写得更好.
发布于 2022-09-18 15:37:23
下面是我解决这个问题的方法:在您的中间件中,请执行以下操作(我使用的是类型记录):
export const sessionStore = new session.MemoryStore();
..。
UserApp.use(session({
secret: SESSION_SECRET,
resave: false,
saveUninitialized: true,
store: sessionStore, // Session store goes here!
cookie: {
secure: true,
httpOnly: false,
maxAge: ONE_DAY }
}));我们将调用这个应用程序,其中包含中间软件应用程序A。我有另一个应用程序,我会叫应用程序B。从该应用程序,我们将制作一个http.request到应用程序A,应用程序A将调用以下内容。sessionStore.get(payload.SID, (_err, session) => {/* callback */})
它将从会话存储区返回会话,条件是会话仍然存在。我们将这个会话返回到应用程序B,我们可以用它做任何我们想做的事情。希望这能帮到别人,这让我很烦。
编辑:啊然后我看到了这个..。
警告:默认的服务器端会话存储( MemoryStore )不是为生产环境而设计的。在大多数情况下,它都会泄漏内存,不会扩展到单个进程,而且只用于调试和开发。
太棒了。
编辑2:我用这个商店代替,很简单的交换。https://www.npmjs.com/package/connect-redis
https://stackoverflow.com/questions/73763960
复制相似问题