会话存储和数据库有啥区别

Posted

技术标签:

【中文标题】会话存储和数据库有啥区别【英文标题】:What is the difference between a session store and database会话存储和数据库有什么区别 【发布时间】:2016-02-27 02:35:15 【问题描述】:

我一直在尝试使用 socket.io 在 node.js 应用程序中实现身份验证和会话管理。

从我找到的几乎所有资源中,我发现了“会话存储”一词。

有一些开源工具可以为我们处理会话,但我们必须为它们提供一个会话存储

一些工具在内存中内置了会话存储,例如模块express-session带有一个默认的内存中会话存储,但也有这个警告:

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

于是我搜索了可用的稳定会话存储,结果发现大多数名称都是我听说过的数据库

例如,这是我在 GitHub 上遇到的 list of session stores 和 another one。

名称包括 MongoDB、mysql、SQLite、cassandra、firebase 等,因此会造成混淆。

所以问题是,会话存储和数据库是否相同..? (我可以这样想——当我们使用数据库来存储会话详细信息时,我们称之为会话存储,但它实际上是一个数据库)

如果不是,它们有何不同..?

【问题讨论】:

【参考方案1】:

会话存储是会话数据存储在服务器上的地方。 在网络上,它通常由存储在客户端浏览器中的 cookie 识别。 因此,它允许您的应用识别用户并让他保持登录状态。

会话可以是内存、一些数据库、简单文件,或者您可以想出的任何其他地方来存储会话数据。

如果您的项目使用某些数据库,您可以将会话存储配置为使用相同的数据库,以避免服务器上的另一个数据库仅用于会话存储。

不同会话存储的区别:

内存会话存储将在每次应用重新启动时重置。也是最快的。 数据库会话存储,应用程序将是安全的 重新启动。在某些时候你会有很多会话对象 你可能想要清理它。甚至可以从不同的应用程序访问存储在数据库中的相同会话。

【讨论】:

我还要补充一点,当使用多个服务器时,内存会话将 99.9% 失败,除非您会在它们之间提出一些奇怪的会话同步解决方案。 “您可以将会话存储配置为使用相同的数据库”* - 您的意思是 ““您可以使用与会话存储相同的数据库””..?因为第一句话听起来仍然像会话存储是一些特殊的实体,你可以连接到数据库 在数据库“会话存储”中是一些包含会话相关数据的表。【参考方案2】:

会话存储是一种将有关用户的信息存储为具有唯一标识符的会话的方法。它可以存储在内存或数据库中。 Socket.io 可以使用 socket-express-session 包中 express 应用程序中使用的相同会话(id),如果我没记错的话。

然后,您可以使用会话信息来授予/限制访问权限,例如。

【讨论】:

以上是关于会话存储和数据库有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡器 cookie 粘性和用于存储用户会话的 ElastiCache 有啥区别?

oracle 在存储过程中动态的建一个临时表使用和在数据库里写死一个临时表使用两者有啥区别?

hive 的元数据存储在 derby 和 mysql 中有啥区别

saveUninitialized 和重新保存有啥区别?

AngularJS 中会话存储、本地存储和 Cookie 的区别

OBIEE 存储库变量和会话变量之间的区别