我正在阅读一本关于MVC2的书,并在OutputCache部分中说明:
警告在前面的“授权过滤器如何交互”一节中 使用输出缓存,“我解释说[授权]有特殊之处 行为,以确保未经授权的访客无法获得敏感 信息只是因为它已经被缓存了。 然而,除非你 特别是防止它,缓存输出仍然可能 交付给与其不同的授权用户 最初是生成的。防止这种情况的一种方法是 实现您对特定内容项的访问控制 授权过滤器(派生自AuthorizeAttribute)而不是 只需在动作方法中内联强制执行授权逻辑, 因为AuthorizeAttribute知道如何避免被输出绕过 缓存。仔细测试以确保授权和输出 缓存以您期望的方式进行交互。
这在MVC3中是否仍然如此?
如果是肯定的,有什么方法可以防止这种情况发生? (因为书中的解释太模糊了。)
问候。
答案 0 :(得分:5)
我认为是。
使用OutPutCache缓存数据时,这些数据将全局缓存。只要用户获得授权,用户就会获得缓存数据。
是的,我们为outputcache提供了“VaryByParam”选项,但它也为传递的每个不同参数创建了一个新的缓存。这意味着它仍然是全球性的。
因此,如果您想根据用户缓存不同的数据,那么outputcache可能不是正确的方法。如果数据是用户特定的,则会话是正确的选择。
是会议的生命