会话数据如何存储在服务器端的 NodeJS 中?

How Session Data is stored in NodeJS in server-side?

我是 NodeJS 的初学者。我正在研究一个简单的基于会话的用户授权来体验一下,它工作得很好,因为互联网上有很多易于理解的例子。我使用了 express-session 和以下代码:

app.use(session({
    key: 'userid',
    secret: 'hojoborolo',
    resave: false,
    saveUninitialized: false,
    cookie: {
        expires: 600000
    }
}));

创建了一个简单的会话,然后我可以使用 req.session 对象访问它。

我查看了 express-session 文档以获取有关会话数据的更多信息。上面写的很清楚 "Session data is not saved in the cookie itself, just the session ID. Session data is stored server-side. The default server-side session storage is MemoryStore."

像PHP一样,其中简单的PHPSESSID会话数据存储在服务器端默认临时目录/tmp下的文件中,MemoryStore存储的位置和方式服务器端的数据并利用它? MemoryStore 的基本工作原理是什么?

P.S.: 来自 PHP 背景

您在开始使用会话方面走在正确的轨道上,但是如果您正在创建生产应用程序,您将希望切换到内置 MemoryStore 以外的其他选项。如您所见 in the documentation:

Warning The default server-side session storage, MemoryStore, is purposely not designed for a production environment. It will leak memory under most conditions, does not scale past a single process, and is meant for debugging and developing.

MemoryStore 顾名思义 - 它将会话存储在进程的内存中,这意味着如果您重新启动应用程序,您将丢失会话。 PHP 请求是独立的;每个请求都会产生一个新进程,该进程在请求完成时结束,因此默认情况下会话必须存储在临时文件之类的地方。使用 Node.js/Express 有一个连续 运行 进程处理所有传入的请求,因此您可以将会话存储在进程的内存中。您可以在概念上将其视为与应用程序中的 app 变量或任何其他全局变量没有区别。

因此,虽然在内存中存储会话有效,但如果您的应用程序出于任何原因重新启动,您将丢失所有会话,这使得它不适合生产环境(以及它泄漏内存的事实)。这对于测试以确保您的会话代码正常工作很有用,但是您将希望切换到可以持久处理会话的 compatible session store(它可以像您建议的那样位于 /tmp 中,数据库等)