【发布时间】:2011-05-10 05:04:54
【问题描述】:
我正在开发一个很快将不再 100% 公开的公共网站。付费用户将能够访问 100% 的功能,而“匿名”用户将访问缩减版。
问题是匿名用户和付费用户将访问相同的页面,但他们会看到不同的东西。
我想知道如何继续为所有页面使用缓存。我必须 100% 确保我为每种类型的用户显示正确的内容。将付费网站的缓存版本显示给匿名用户(反之亦然)将是非常糟糕的。
最好不要在 url 中添加任何内容来区分用户类型。
谢谢!
【问题讨论】:
我正在开发一个很快将不再 100% 公开的公共网站。付费用户将能够访问 100% 的功能,而“匿名”用户将访问缩减版。
问题是匿名用户和付费用户将访问相同的页面,但他们会看到不同的东西。
我想知道如何继续为所有页面使用缓存。我必须 100% 确保我为每种类型的用户显示正确的内容。将付费网站的缓存版本显示给匿名用户(反之亦然)将是非常糟糕的。
最好不要在 url 中添加任何内容来区分用户类型。
谢谢!
【问题讨论】:
我认为您正在寻找的内容可以通过输出缓存的 varybycustom 选项来完成。使用它,您可以定义一个函数来返回一个自定义参数值,该值在检索页面的输出缓存版本时使用,以便用户将获得他们自己的个性化缓存版本,并且所有匿名用户都应该看到相同的缓存版本,因为他们将使用一些相同的值。这是一个包含更多信息的链接: http://aspadvice.com/blogs/ssmith/archive/2007/10/29/VaryByCustom-Caching-By-User.aspx
对于程序化数据缓存,您应该使用用户 ID 作为密钥的一部分来检索数据以达到相同的效果。
【讨论】:
您可以为您的业务数据使用应用程序缓存,它基本上是一个键值对字典,您可以将任何您喜欢的内容放入其中。然后您可以以编程方式检查他们是否已登录。您仍将在每次访问时呈现页面,但希望检索缓存的数据将提供所需的性能提升。
或者,它可能是possible to turn off the output-cache programatically, as described in this question.
引用this answer from David Ebbo:
在 OnInit 中:
if (yourArbitraryCondition) {
OutputCacheParameters outputCacheSettings = new OutputCacheParameters();
outputCacheSettings.Duration = 60;
InitOutputCache(outputCacheSettings);
}
【讨论】: