据我了解,页面级缓存没有考虑到,对于经过身份验证的网站,不同的用户可能会请求完全相同的页面(URL),而呈现的页面本身则不同(因为它包含用户特定的内容) 。
除非您激活无cookie身份验证(然后sessionID成为URL的一部分),否则所有用户都将看到相同的缓存页面(无论他们是谁)。
这是对的吗?
答案 0 :(得分:4)
是的,你在这一方面100%正确。
通常我会转移到用户控件,以便能够缓存不会从用户更改为用户的项目的用户控件。
如果必须缓存用户特定数据,则可以使用Session或其他缓存存储。
答案 1 :(得分:3)
根据您在页面上拥有的动态对象的数量,您可以使用“替换”控件在缓存页面上呈现动态内容。
此控件绑定到一个静态方法(请记住,页面生命周期尚未运行,因为这是页面的缓存版本,并且Page_Load中没有创建任何对象等可用),这些方法返回动态内容并且可以定位你想在页面上的任何地方。
<asp:Substitution ID="mySubstitution" runat="server" MethodName="GetLoggeninUserName" />
答案 2 :(得分:3)
另一个选择是“甜甜圈缓存”,正如Scott Guthrie所说:
Implement "Donut Caching" with the ASP.NET 2.0 Output Cache Substitution Feature
这允许您在非缓存“漏洞”中实现某些元素时具有页面级缓存。
答案 3 :(得分:0)
是的,你是正确的,如果你使用的是ASP.NET 2.0或更高版本,Andy(和Zhaph)注意到的Substitution控件是你最好的答案。为非特定于用户的内容创建单独的用户控件是一种不太理想的方法,只有在您使用ASP.NET v1.x时才应该使用(因此您应该将Andy的标记作为答案,我认为)。