我知道这是stackoverflow中的一个热门问题。我已经经历了每一个相同的问题,我无法为我找到正确的答案。 这是我的退出控制器操作结果
[Authorize]
public ActionResult LogOut(User filterContext)
{
Session.Clear();
Session.Abandon();
Session.RemoveAll();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
FormsAuthentication.SignOut();
return RedirectToAction("Home", true);
}
它对我不起作用。 我也试过添加 -
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="0"/>
这些都没有解决我的问题。
答案 0 :(得分:49)
您的方法存在的问题是,您将其设置为MVC应用它已经太晚了。应将以下三行代码放在显示您不想显示的视图(因此是页面)的方法中。
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
如果要在所有页面上应用“浏览器无缓存”行为,则应将其放在global.asax中。
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
答案 1 :(得分:13)
只需在操作上设置输出缓存即可。我在很多项目中都使用过这种方法:
[HttpGet, OutputCache(NoStore = true, Duration = 1)]
public ActionResult Welcome()
{
return View();
}
如果用户向后/向前导航到您的视图,上述属性将基本上指示浏览器从您的控制器操作获取页面的新副本。
您还可以在web.config中定义缓存,并与此属性结合使用以避免重复。见here