MVC3中的OutputCache和Authorize过滤器

时间:2011-07-18 11:05:46

标签: asp.net-mvc asp.net-mvc-3 outputcache authorize-attribute

我正在阅读一本关于MVC2的书,并在OutputCache部分中说明:

  

警告在前面的“授权过滤器如何交互”一节中   使用输出缓存,“我解释说[授权]有特殊之处   行为,以确保未经授权的访客无法获得敏感   信息只是因为它已经被缓存了。 然而,除非你   特别是防止它,缓存输出仍然可能   交付给与其不同的授权用户   最初是生成的。防止这种情况的一种方法是   实现您对特定内容项的访问控制   授权过滤器(派生自AuthorizeAttribute)而不是   只需在动作方法中内联强制执行授权逻辑,   因为AuthorizeAttribute知道如何避免被输出绕过   缓存。仔细测试以确保授权和输出   缓存以您期望的方式进行交互。

这在MVC3中是否仍然如此?

如果是肯定的,有什么方法可以防止这种情况发生? (因为书中的解释太模糊了。)

问候。

1 个答案:

答案 0 :(得分:5)

我认为是。

使用OutPutCache缓存数据时,这些数据将全局缓存。只要用户获得授权,用户就会获得缓存数据。

是的,我们为outputcache提供了“VaryByParam”选项,但它也为传递的每个不同参数创建了一个新的缓存。这意味着它仍然是全球性的。

因此,如果您想根据用户缓存不同的数据,那么outputcache可能不是正确的方法。如果数据是用户特定的,则会话是正确的选择。

是会议的生命