繁体   English   中英

根据用户是否经过身份验证,在改变View内容的同时使用ASP.NET MVC OutputCache

[英]Using ASP.NET MVC OutputCache while varying View content based on whether user is authenticated

我正在构建一个ASP.NET MVC 2站点,我正在大量使用OutputCache参数。 但是,我有一个问题:使用这样的缓存可能会干扰身份验证

在我的所有页面上,我显示用户是否已登录。 此外,在我的一些视图中,我根据用户角色进行过滤,以确定是否显示某些页面内容(例如,我的某个页面上的“ 编辑”链接仅显示给主持人或管理员角色的用户) 。

是否会使用OutputCache干扰我的视图的动态更改? 如果是这样,如何在不消除缓存的情况下解决此问题?

[OutputCache]和[Authorize]属性可以很好地相互配合。 AuthorizeAttribute.OnAuthorization()方法将挂钩设置到输出缓存系统中,该挂钩系统强制授权过滤器在从缓存提供页面之前重新运行。 如果授权过滤器逻辑失败,则将其视为高速缓存未命中。 如果授权逻辑成功,则将从缓存提供页面。 因此,如果您对某个操作有[授权(角色=“主持人,管理员”)]和[OutputCache],则除非当前用户处于主持人或管理员角色,否则不会从缓存中提供该页面。

请注意,这不会因用户或角色而异; 它确实重新运行原始支票。 想象一下,用户A(谁是主持人)进来并导致页面被缓存。 现在,用户B(谁是管理员)进入并点击缓存页面。 由于允许管理员和主持人,[授权]检查将成功,并且提供给用户B的响应将包含与向用户A提供的响应完全相同的内容

请注意,响应替换在MVC 2中不起作用。如果您正在提供潜在的敏感数据,那么最好的选择是不要缓存它。 如果您绝对需要缓存,则可以使用AJAX回调来动态填充缺失的数据,从而模仿类似于响应替换的内容。

我相信你需要的是ASP.NET donunt缓存。 请看这里有一个很好的解释。 如果SO在顶部酒吧区使用类似的东西,我不会感到惊讶。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM