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

ASP.NET页面级缓存(具有经过身份验证的站点),asp.net,caching,Asp.net,Caching,我的理解是,页面级缓存没有考虑到,对于经过身份验证的站点,不同的用户可能会请求完全相同的页面(URL),而呈现的页面本身是不同的(因为它包含特定于用户的内容) 除非激活无cookieless身份验证(然后sessionID成为URL的一部分),否则所有用户都将看到相同的缓存页面(无论他们是谁) 这是正确的吗?是的,你在这一点上100%正确 通常,我会转到用户控件,以便能够缓存项目的用户控件,这些项目不会因用户而异 然后,如果必须缓存用户特定的数据,则可以使用会话或其他缓存存储。根据页面上的动态内

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

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


这是正确的吗?

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

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


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

根据页面上的动态内容量,可以使用替换控件在缓存页面上呈现动态内容

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

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

另一个选项是Scott Guthrie称之为“甜甜圈缓存”:


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

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