4

我正在读一本关于MVC2,并在的OutputCache部分它指出:的OutputCache和授权在MVC3过滤器

警告在前面的“授权过滤器是怎样互动 与输出缓存,”我解释说, [授权]具有特殊的 行为,以确保未经授权的访问者因为已经被缓存而无法获取敏感的 信息。 但是,除非您专门阻止它,否则缓存的输出可能会被传送给不同的授权用户,而不是最初为其生成的用户。一个防止的办法是 实现特定内容项目作为 授权过滤器(从AuthorizeAttribute派生)的访问控制,而不是 简单地执行授权逻辑内嵌在一个操作方法, 因为AuthorizeAttribute知道如何避免被绕过输出 缓存。仔细测试以确保授权和输出缓存以您期望的方式进行交互。

这在MVC3中仍然如此吗?

如果是肯定的,那么防止发生这种情况的方法是什么? (因为书中的解释过于模糊)。

问候。

回答

4

我认为这是。

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

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

所以如果你想缓存基于用户的不同数据,outputcache可能不是正确的做法。如果数据是用户特定的,则会话是正确的选择。这是什么会议生活

+0

太好了,无论如何我会开始赏金,所以也许我可以捕捉更多的解释:D感谢一百万。 – vtortola

+0

因此,如果我使用“OutputCacheAttribute.VaryByHeader = Cookie”,它将在授权方面安全吗?我想要缓存的是呈现的页面,因为它们中的一些很大并且具有很多生成逻辑。 – vtortola

+0

这是一个选项。但如果信息是关键的,那么你应该不会依赖于存储在客户端的cookie。 – fengd