【问题标题】:ASP.NET Page Level Caching (with authenticated sites)ASP.NET 页面级缓存(带有经过身份验证的站点)
【发布时间】:2009-01-19 14:29:19
【问题描述】:

据我了解,页面级缓存没有考虑到,对于经过身份验证的站点,不同的用户可能会请求完全相同的页面 (URL),而呈现的页面本身是不同的(因为它包含用户特定的内容) .

除非您激活无 cookie 身份验证(然后 sessionID 成为 URL 的一部分),否则所有用户都将看到相同的缓存页面(无论他们是谁)。

这对吗?

【问题讨论】:

    标签: asp.net caching


    【解决方案1】:

    是的,你在这个问题上 100% 正确。

    通常我会转到用户控件,以便能够缓存不会因用户而异的项目的用户控件。

    如果您必须缓存用户特定的数据,则可以使用 Session 或其他缓存存储。

    【讨论】:

      【解决方案2】:

      根据页面上有多少动态内容,您可以使用 Substitution 控件在缓存页面上呈现动态内容。

      此控件绑定到一个静态方法(请记住,页面生命周期尚未运行,因为这是页面的缓存版本,并且在 Page_Load 等中创建的任何对象都不可用),该方法返回动态内容并且可以定位页面上的任何位置。

      <asp:Substitution ID="mySubstitution" runat="server" MethodName="GetLoggeninUserName" />
      

      【讨论】:

        【解决方案3】:

        另一个选项是 Scott Guthrie 所说的“甜甜圈缓存”:

        Implement "Donut Caching" with the ASP.NET 2.0 Output Cache Substitution Feature

        这允许您进行页面级缓存,同时在非缓存“洞”中实现某些元素。

        【讨论】:

          【解决方案4】:

          是的,您是正确的,如果您使用的是 ASP.NET 2.0 或更高版本,Andy(和 Zhaph)指出的替换控件是您的最佳答案。为非用户特定的内容创建单独的用户控件是一种不太理想的方法,仅当您坚持使用 ASP.NET v1.x 时才应使用该方法(因此您应该将 Andy 标记为答案,我认为)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-03
            • 1970-01-01
            • 1970-01-01
            • 2017-03-02
            • 2015-06-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多