5

我正在阅读一本关于 MVC2 的书,在 OutputCache 部分中它指出:

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

这在 MVC3 中仍然成立吗?

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

问候。

4

1 回答 1

5

我觉得是这样的。

当您使用 OutPutCache 缓存数据时,这些数据会被全局缓存。只要用户被授权,用户就会得到缓存的数据。

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

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

于 2011-07-18T16:32:13.753 回答