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

Sup*_*aha 8 authentication session node.js express-session

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

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

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

我访问了快速会话文档以获取有关会话数据的更多信息。它明确表示“会话数据不保存在cookie本身中,只是保存会话ID。会话数据存储在服务器端。默认的服务器端会话存储是MemoryStore。”

像PHP一样,简单的PHPSESSID会话数据存储在/tmp服务器端默认临时目录下的文件中,MemoryStore这些数据在服务器端的位置以及如何存储并利用它?基本上如何MemoryStore运作?

PS:来自 PHP 背景

Jas*_*man 5

您在开始使用会话方面走在正确的轨道上,但如果您正在创建生产应用程序,您将需要切换到内置 MemoryStore 之外的其他选项。正如您在文档中看到的:

警告 默认服务器端会话存储 MemoryStore 并非专为生产环境设计。它在大多数情况下都会泄漏内存,不会扩展到单个进程,并且用于调试和开发。

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

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