代码之家  ›  专栏  ›  技术社区  ›  Captain Sensible

ASP。NET页面级缓存(具有经过身份验证的站点)

  •  5
  • Captain Sensible  · 技术社区  · 17 年前

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

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

    这是正确的吗?

    4 回复  |  直到 17 年前
        1
  •  4
  •   Mitchel Sellers    17 年前

    是的,你在这一点上是100%正确的。

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

    然后,如果必须缓存用户特定的数据,您可以使用会话或其他缓存存储。

        2
  •  3
  •   Andy Rose    17 年前

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

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

    <asp:Substitution ID="mySubstitution" runat="server" MethodName="GetLoggeninUserName" />
    
        3
  •  3
  •   Zhaph - Ben Duguid    17 年前

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

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

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

        4
  •  0
  •   ssmith    17 年前

    是的,你是对的,如果你使用ASP,Andy(和Zhaph)指出的替换控制是你最好的答案。NET 2.0或更高版本。为非特定于用户的内容创建单独的用户控件是一种不太理想的方法,只有在使用ASP时才能使用。NET v1.x(所以我认为你应该把Andy的标记为答案)。

    推荐文章