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

问题描述 投票:3回答:1

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

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

创建了一个简单的会话,然后我就能够使用 req.session 对象。

我去了 快捷键 文档,以获得更多关于会话数据的信息。它明确表示,有 "会话数据不保存在cookie本身,只保存会话ID。会话数据存储在服务器端。服务器端默认的会话存储是MemoryStore。"

像PHP,其中简单的 PHPSESSID 会话数据存储在默认的临时目录下的文件中。/tmp 在服务器端,在哪里和如何 MemoryStore 将数据存储在服务器端并加以利用?如何 MemoryStore 基本上的工作?

P.S.。 来自PHP背景

node.js authentication session express-session
1个回答
1
投票

你在正确的轨道上开始使用会话,但如果你正在创建一个生产应用程序,你将希望切换到另一个选项,而不是内置的MemoryStore。正如你所看到的 在文件中:

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

MemoryStore的作用就像它的名字一样--它将进程的会话存储在内存中,这意味着如果你重新启动你的应用程序,你将失去会话。PHP的请求是自足的;每个请求都会产生一个新的进程,当请求完成时,这个进程就会结束,因此会话默认情况下必须存储在某个地方,比如一个临时文件。在Node.jsExpress中,有一个持续运行的进程,它处理所有进来的请求,因此你可以将会话存储在进程的内存中。你可以在概念上认为这和我们的程序中的 app 变量或应用程序中的任何其他全局。

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

© www.soinside.com 2019 - 2024. All rights reserved.