会话数据如何存储在服务器端的 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 中,数据库等)
我是 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 中,数据库等)