勤于思考: 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了那麼鬼簡單搞那麼麻煩出來。

相關文章
相關標籤/搜索