asp.net-mvc - MVC 4 - 注销后后退按钮问题

标签 asp.net-mvc asp.net-mvc-4 browser-cache back-button

我读过很多帖子,其中人们遇到了类似的问题,但尚未找到可行的解决方案。我有一个 MVC 4 站点,我不想从整个网站中删除缓存,因为我想缓存页面。当用户单击注销按钮时,它会成功注销并重定向到登录页面,但是当用户单击后退按钮时,它会显示以前查看过的“受限页面”,您只能在登录后才能看到该页面。我明白这是因为浏览器已经缓存了客户端的页面。我尝试了多种解决方案,但正如前面提到的,它们都不起作用。目前我的注销有以下代码:

    public ActionResult LogOff()
    {

        FormsAuthentication.SignOut();
        Session.Abandon();
        Session.Clear();

        // clear authentication cookie 
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie1);

        // clear session cookie (not necessary for your current problem but i would recommend you do it anyway) 
        HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
        cookie2.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie2); 

        // Invalidate the Cache on the Client Side 
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        Response.Cache.SetNoStore();

        Response.AppendHeader("Pragma", "no-cache");

        // send an expired cookie back to the browser 
        var ticketExpiration = DateTime.Now.AddDays(-7);
        var ticket = new FormsAuthenticationTicket(
            1,
            // replace with username if this is the wrong cookie name 
            FormsAuthentication.FormsCookieName,
            DateTime.Now,
            ticketExpiration,
            false,
            String.Empty);
        var cookie = new System.Web.HttpCookie("user")
        {
            Expires = ticketExpiration,
            Value = FormsAuthentication.Encrypt(ticket),
            HttpOnly = true
        };

        Response.Cookies.Add(cookie); 

        return RedirectToAction("Login", "Account");
    }

最佳答案

如果您想在所有页面上应用“浏览器背面无缓存”行为,那么您应该将以下内容放入 global.asax 中。

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}

希望它对某人有帮助!

关于asp.net-mvc - MVC 4 - 注销后后退按钮问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12110127/

相关文章:

asp.net-mvc - 部署 asp.net MVC 应用程序

c# - 使用 ModelState MVC 进行验证

javascript - 使用响应 HTTP 重定向的 URL 预加载/缓存图像

css - chrome 是否在 css 文件中缓存资源?

javascript - 如何从 cshtml 页面导航到网络表单?

c# - 不会保存编辑

c# - 需要截断 Razor HTML DisplayFor Helper

asp.net-mvc - Application_Error 被调用但没有异常

c# - 在 ASP.Net/C# 中验证 Base64 图像

php - php 的 `filemtime` 对于浏览器缓存或缓存清除来说是个好主意吗?