0

我正在使用以下代码行在注销后禁用浏览器后退按钮问题asp.net MVC4.

[OutputCache(NoStore = false, Duration = 0, VaryByParam = "None")] 
        public ActionResult Logout()
        {
            try
            {
                if (Session["username"] != null)
                {
                    Session.Abandon();
                    Session.Clear();
                    Session.RemoveAll();
                    Session["username"] = null;
                    Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
                    Response.Cache.SetNoStore();
                    return RedirectToAction("Index", "AdminPanel");
                }

               return RedirectToAction("Error", "Home");
            }
            catch (Exception e)
            {
                return RedirectToAction("Error", "Home");
            }
        }

但是,这段代码有一个问题,假设我有三个页面,第一个是登录页面(Index.cshtml),第二个页面是成功登录页面(home.cshtml),第三个页面是关于页面(about.cshtml),现在我登录然后它会在页面上重定向我,home.cshtml因为我继续前进第三页 about.cshtml 之后我从about.cshtml页面注销,它将我重定向到login.cshtml页面上。现在,如果我单击浏览器后退按钮,然后about.cshtml再次将我重定向到页面上,但用户无法更改或添加任何内容。所以让我知道是否有任何适当的代码或方法来解决这个问题。

4

1 回答 1

0

如果您将它放在呈现 about.cshtml 的控制器方法中,它将按照您的描述工作:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();

不太理想,但会让你走上正轨。基本上,浏览器从他们登录时就缓存了 about.cshtml。告诉 logout 方法不要缓存响应并没有多大作用,因为它执行的是重定向而不是渲染。

于 2013-04-09T15:37:50.503 回答