勤于思考: ASP.NET MVC 注销后 使用浏览器 【后退】 不使用缓存页面

通过本身和朋友一块儿探讨,总结出三种方法实现。javascript

方法一:java

<script type="text/javascript">
        $(function () {
            window.history.forward(1);
         });
</script>

在系统后台页面或者是模板页加入该句脚本,使后退和前进相互抵消。缓存

 

方法二:服务器

<script type="text/javascript"> 
    $(function () {
            $.post("/Account/isLogin", { random : Math.random() },function(data){
                if (data != "True") {
                    window.location.reload();
                }
            });
    });
</script>

在系统后台页面加入Ajax请求访问服务器判断用户是否为登陆状态,若是不是刷新该页框架

这种方法仍是有点美中不足,就是点击后退的时候会闪现一下原先的页面,并且还要多一个请求,浪费资源。dom

 

方法三:ide

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

因为我是使用MVC3框架定义以上过滤器,不启用缓存设置post

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

全局的话能够丢到Application_Start()程序启动时GlobalFilters.Filters集合中。url

[NoCacheFilter]
public class AccountController : Controller
{
       [NoCacheFilter]
        public ActionResult LogOut()
        {
            Session["Users"] = null;
            Session["Department"] = null;
            Session.Clear();
            Session.RemoveAll();
            Cookie.ClearUserCookie();
            Cookie.ClearUserCookie("url");
            ClearCache();

            return Redirect("/Account/Login");
        }
}

也能够单独对某个控制器使用或者某个动做使用。取决于你想要哪里不缓存。spa

感谢个人伙伴波神与我一块儿探讨这个问题,最后我确实犯2了那么鬼简单搞那么麻烦出来。

相关文章
相关标签/搜索