MVC3中的OutputCache和Authorize过滤器

vto*_*ola 5 asp.net-mvc outputcache authorize-attribute asp.net-mvc-3

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

警告在前面的"授权过滤器如何与输出缓存交互"一节中,我解释说[授权]具有特殊行为,以确保未经授权的访问者只是因为它已经被缓存而无法获取敏感信息.但是,除非您明确地阻止它,否则缓存输出仍然可以传递给与最初生成它的用户不同的授权用户.防止这种情况的一种方法是将特定内容项的访问控制实现为授权过滤器(派生自AuthorizeAttribute),而不是简单地在操作方法中内联强制授权逻辑,因为AuthorizeAttribute知道如何避免被输出缓存绕过.仔细测试以确保授权和输出缓存以您期望的方式进行交互.

这在MVC3中仍然如此吗?

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

问候.

fen*_*ngd 5

我觉得是这样的.

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

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

因此,如果您想基于用户缓存不同的数据,那么outputcache可能不是正确的方法.如果数据是用户特定的,则会话是正确的选择.这是会议的生命