会话存储和数据库有什么区别?

18

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

从几乎所有我找到的资源中,我遇到了术语“会话存储”。

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

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

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

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

例如,在GitHub上,我遇到了会话存储列表另一个

名称包括MongoDB、MySQL、SQLite、cassandra、firebase等,因此引起了混淆。

所以,问题是,会话存储和数据库是一样的吗..?(我可以认为当我们使用数据库存储会话详细信息时,我们称其为会话存储,但实际上它是数据库)

如果不是,它们有什么区别..?

2个回答

16

会话存储是保存在服务器上的会话数据的地方,在Web上通常通过存储在客户端浏览器中的cookie进行标识。因此,它允许您的应用程序识别用户并使其保持登录状态。

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

如果您的项目使用某个数据库,您可以配置会话存储以使用同一数据库,以避免为了会话存储而在服务器上拥有另一个数据库。

不同会话存储之间的差异:

  • 内存会话存储会在每次启动应用程序时重置。同时,它也是最快的。
  • 数据库会话存储将在应用程序重新启动时保持安全。在某个时间点,您可能需要清理许多会话对象。并且相同的会话存储在数据库中甚至可以从不同的应用程序中访问。

4
除非你想出一些奇怪的会话同步解决方案,否则在使用多个服务器时,记忆会话99.9%失败。 - kaytrance
1
你可以配置你的会话存储来使用同一个数据库。你的意思是"你可以使用相同的数据库作为会话存储"吗?因为第一句话仍然听起来像会话存储是一个特殊实体,你可以连接到一个数据库。 - T J
1
在数据库中,“会话存储”是一个包含与会话相关数据的表。 - ulikus

1
会话存储是一种通过唯一标识符作为会话存储用户信息的方法。它可以存储在内存或数据库中。如果我没有弄错,Socket.io 可以利用 socket-express-session 包中使用的与 express 应用程序相同的会话(id)。
您可以使用会话信息来授予/限制访问权限,例如。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接