【问题标题】:Web application without SQL query for current user authentication没有用于当前用户身份验证的 SQL 查询的 Web 应用程序
【发布时间】:2012-10-23 06:25:09
【问题描述】:

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

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

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

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

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

它们是最好的方法吗?你怎么看?

感谢您的任何想法。

【问题讨论】:

    标签: ruby-on-rails api rest web-applications concurrency


    【解决方案1】:

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

    【讨论】:

    • 谢谢你,@Veraticus。这是有道理的。我想我将在一些会话变量中加载当前用户的每个字段。
    • 但是,没有 cookie 就无法使用会话变量。所以,由于 cookie 在 API 上不是很流行,也许会话变量不是好方法。
    猜你喜欢
    • 2013-07-24
    • 2013-05-04
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多