1

我有一个每秒有很多请求的网络服务器。为了优化数据库的 I/O 性能,服务器目前仅通过 HTTP 查询执行 2 个 SQL 查询:

  • 为了获取当前用户,有一个查询,
  • 有一个查询可以读取或写入资源。

而且我目前想知道在会话变量中缓存当前用户的ID是否不明智。这样,服务器可以通过 HTTP 查询仅执行 1 个 SQL 查询。

为此,客户端必须在应用程序上进行身份验证。然后,在检查用户名+密码的 SQL 查询之后,服务器可以将他的 id 保存在会话变量中。在此之后,我们可以删除无用的 SQL 查询。

由于这看起来非常简单且有用,我想知道为什么流行的身份验证插件,例如 Devise gem(用于 Rails 或 Sinatra)似乎不能以这种方式工作。

他们是这样做的最佳方式吗?你有什么想法?

感谢您的任何想法。

4

1 回答 1

0

就是Devise 和大多数身份验证框架的功能。将 ID 保存在会话中的目的是让您可以快速轻松地从数据库中检索用户:推测您获取用户是有原因的(例如在页面上显示他们的姓名、检查身份验证、模型分配),并且仅从会话中获取他们的 ID 不会告诉您任何此类信息。所以无论如何你仍然必须从数据库中获取用户。

于 2012-11-02T15:34:36.853 回答