【问题标题】:Role Caching Strategies in ASP.NET MVCASP.NET MVC 中的角色缓存策略
【发布时间】:2010-12-12 06:04:56
【问题描述】:

我们有一个 ASP.NET MVC 应用程序,为此我们开发了我们自己的自定义 RoleProvider 类。如果没有缓存,它将访问每个请求的数据存储区 - 不好。我们可以找到的唯一缓存选项是(在 web.config 中)通过存储在客户端计算机上的 cookie。我的两个问题是:

  1. 这是否安全(即使启用了加密)?
  2. cookie 信息是否会随每个 Web 请求一起传输 - 因此,与每次访问数据存储相比,可能会降低应用程序的速度吗?

有人有替代路线吗?我知道在 Session 中缓存这些信息也不好?

【问题讨论】:

    标签: asp.net asp.net-mvc caching roles roleprovider


    【解决方案1】:

    虽然每个请求都查询数据库效率低下的想法是正确的,但请记住,现代数据库中正确索引表的 SELECT 性能非常快,因此我会首先进行一些测量以确保这种情况实际上会对性能产生负面影响与理论上可能会对以后的性能产生负面影响。

    使用 Session 的缺点与其说是开销(最小)不如说是 Session 存储非常违反并且不是特别可靠。例如,您很容易失去会话并仍然拥有登录用户。

    也就是说,在这里解决问题的一个好方法是使用 HttpContext.Items 集合缓存每个请求的用户角色。这将限制每个请求一个 SELECT,这可能是相当有效的(参见上面的测量),同时避免其他存储问题 - 例如胖、不安全的 cookie 或一些违反基于会话的解决方案。

    【讨论】:

      【解决方案2】:

      cookie 信息实际上会随着每个请求从浏览器发送到您的网络服务器,这就是 cookie 的工作原理,但只要 cookie 的大小合理,它就不会对表现。如果您使用表单身份验证,我建议将角色存储在表单身份验证 cookie 中,如this blog post 中所述。在这种情况下,您只是将数据添加到已经存在的 cookie 中。但是,您应该知道,您可以在该 cookie 中存储的数据量有一个上限,如 here 所述。

      【讨论】:

        【解决方案3】:

        如果您已经开发了自己的自定义 RoleProvider 类,则可以进行自己的数据缓存,例如使用 ASP.NET 缓存。这比使用 Session 作为缓存更灵活,因为它甚至可以在没有启用会话状态的页面上工作。

        我不同意 Wyatt Barnett 的评论:

        使用 Session 的缺点 ...会话存储的事实是 很违和不特别 可靠

        缓存(无论是 Session、ASP.NET 缓存还是其他)可以是易失的 - 您只需要在需要时重新填充它。

        回答你的问题:

        1. 它与用于加密 cookie 的加密一样安全。如果您依赖 FormsAuthentication,它的安全性必须不低于 Forms Authentication 票证。

        2. cookie 将随每个请求一起传输。因此,如果用户可以拥有大量角色,并且有可能超过浏览器支持的最大 cookie 大小,则可能会影响性能。

        【讨论】:

          猜你喜欢
          • 2011-04-09
          • 2010-12-27
          • 1970-01-01
          • 2011-11-12
          • 2010-10-26
          • 2012-10-11
          • 1970-01-01
          • 1970-01-01
          • 2023-04-08
          相关资源
          最近更新 更多