首页新闻找找看学习计划

mvc3 注销后 使用浏览器 【后退】 不使用缓存页面?

0
悬赏园豆:60 [已解决问题] 解决于 2013-10-08 17:37

 注销系统后  应不允许使用浏览器后退回到需要登陆才显示的系统界面。但是由于浏览器会缓存所以点击后退就直接回去了。这样感觉安全性不好。望大虾指教!如何让浏览器去重新访问服务器下载页面 而不从缓存读取页面?

薛凯凯圆滚滚的主页 薛凯凯圆滚滚 | 初学一级 | 园豆:36
提问于:2013-10-08 15:40
< >
分享
最佳答案
0
定义如下个类:

public class NoCacheAttribute : ActionFilterAttribute {
        public override void OnResultExecuting(ResultExecutingContext filterContext) {
            filterContext.HttpContext.Response.Cache.SetNoStore();
        }
    }

然后在 global.asax.cs

 

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new NoCacheAttribute());
}

 

FYI:

http://stackoverflow.com/questions/1160105/asp-net-mvc-disable-browser-cache

收获园豆:60
Yu | 专家六级 |园豆:12944 | 2013-10-08 16:50

大虾 就是 大虾~ 感谢! 我自己也弄了一个方法感觉不够完美~进去的时候异步请求后台判断Session是否存在不存在刷新页面,异步使用随机参数。但是后退的时候会闪一下原来的页面出来。不够完美~还是大虾的方法简单啊~膜拜

薛凯凯圆滚滚 | 园豆:36 (初学一级) | 2013-10-08 17:37

这个方法是对每个页面都禁用缓存了,其实只对要授权的页面禁用缓存就可以了,恰好授权页面使用了重写的AuthorizeAttribute,于是我就在这个重写的AuthorizeAttribute中加上一句:

/// <summary>
        /// 请求授权时执行
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            filterContext.HttpContext.Response.Cache.SetNoStore();  //禁止缓存,防止退出登陆后,还能后退到登录时的页面
        }
top8843 | 园豆:202 (菜鸟二级) | 2015-12-15 16:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册