ASP.NET缓存:好不好!页面显示旧内容!

时间:2010-04-05 12:43:35

标签: asp.net performance caching

我有一个ASP.NET网站,我使用OutPutCache指令实现了页面级缓存。这提高了页面性能。我的页面几乎没有特定于登录用户的部分(一些按钮,链接和标签)。如果用户没有登录,他们将看到不同的链接。现在我实现了页面级缓存,即使在用户登录后,它也显示旧页面内容(非登录用户的链接和按钮)。

缓存显然很好。但是如何摆脱这个问题呢?我需要完全删除缓存吗?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

您可以使用VaryByParam指令:

  

VaryByParam:这个属性允许我们   控制多少缓存版本   应该基于创建页面   通过HTTP发送的名称/值对   POST / GET。默认值为None。   无意味着只有一个版本   该页面被添加到缓存中,并且   所有HTTP GET / POST参数都是   简单地忽略了相反的   没有价值是*。星号表示   传入的所有名称/值对   用于创建缓存   页面的版本。粒度   但是,可以通过命名来控制   参数(多个参数名称   用分号分开。

在页面指令

中使用
<%@ OutputCache Duration="10800" VaryByParam="State;City" %>

请注意在VaryByParam中使用的内容,因为这会导致内存中页面的副本数达到存在的参数的不同值的数量。

编辑:如评论中所述,如果您使用cookie进行登录,这将无效,但有些人确实使用无cookie登录,这会将信息放入GET / POST部分。

有关详细信息,请参阅here

答案 2 :(得分:2)

我遇到了完全相同的问题,并且能够使用Response.WriteSubstitution解决它。只需创建一个接受HttpContext作为参数的静态方法,将登录状态作为字符串返回,并使用WriteSubstitution呈现方法:

Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetLoginStatus));

页面的其余部分将正常缓存,但每次加载页面时都会更新登录状态。