0

nodejs我用and编写了一个简单的网络服务器express。我使用电子邮件用户名和密码实现了用户身份验证。此外,我有一个记忆功能,它将用户 ID 和密码哈希存储到一个 cookie 中。现在我想要一个额外的会话,当用户关闭浏览器或单击注销按钮时结束。

哪种方式是实施的最佳实践?会话是否与具有过期时间的记住功能相同,并且在每个请求中我必须根据数据库检查凭据?(我对此不太确定)

我正在使用的技术:nodejs, express,mongodb

这不仅仅是一个nodejs问题,我更愿意对问题进行一般性解释。

4

1 回答 1

1

让我先解决这个问题;将密码散列存储到 cookie 中将允许任何人在拥有密码散列时登录,如果密码散列由于某种原因被暴露,那将是灾难性的。加密 cookie 很好,但不要让您存储在数据库中的实际哈希用于身份验证。曾经。

关于重新身份验证,Node 是一种在单个线程上运行的技术,并通过在多个处理器和/或机器上运行更多实例来扩展。保持会话是避免访问数据库的好主意,但您也必须考虑架构。例如,如果您使用存储在文件中的会话(ala PHP)并且需要扩展到多台机器,会发生什么?没有什么好,至少。因此,您需要一个中心点来跟踪会话。

这可以是您的数据库 (MongoDB) 或 Redis 之类的东西,也可以是其他允许您检查会话的集中式机制。无论哪种方式,您都必须花时间执行请求并检索客户端的会话值。如果您没有需要存储的其他值,那么创建专用会话架构(需要过期等)是没有意义的,并且再次进行身份验证是最简单和最合乎逻辑的解决方案。

就我个人而言,我几乎不需要会话,只需再次进行身份验证。

于 2013-02-07T19:34:24.983 回答