您好我是第一次在MVC中开发解决方案所以我面临一个大问题, 当我从我的应用程序(mvc razor web应用程序)注销时,它显示登录页面,但是如果我按浏览器后退按钮它显示最后一个屏幕,我不想要这个,我想如果我按下后退按钮它仍然显示相同的登录页面。 这是我的注销代码
public ActionResult Logout()
{
Session.Clear();
Session.Abandon();
Session.RemoveAll();
FormsAuthentication.SignOut();
this.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
this.Response.Cache.SetCacheability(HttpCacheability.NoCache);
this.Response.Cache.SetNoStore();
return RedirectToAction("Login");
}
答案 0 :(得分:57)
前一段时间我遇到了这个问题,禁用整个应用程序的缓存解决了我的问题,只需将这些行添加到Global.asax.cs
文件中
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
希望这有帮助。
答案 1 :(得分:10)
您需要为所访问的最后一页添加缓存META
标记
因此,通过制作像[NoCache]
这样的CustomAttribute并装饰
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
}
public class AccountController : Controller
{
[NoCache]
public ActionResult Logout()
{
return View();
}
}
或者在页面上使用javascript尝试
<SCRIPT type="text/javascript">
window.history.forward();
function noBack() { window.history.forward(); }
</SCRIPT>
<BODY onload="noBack();"
onpageshow="if (event.persisted) noBack();" onunload="">
答案 2 :(得分:2)
MVC 5应用程序的最简单方法是:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
在每个控制器方法之上,您不想要缓存。或者,如果您正在使用.Core以下工作:
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
度过美好的一天!
答案 3 :(得分:0)
protected void Application_BeginRequest()
{
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
Response.Expires = -1500;
Response.CacheControl = "no-cache";
Response.Cache.SetNoStore();
}
Add [Authorize] filter on each controller
答案 4 :(得分:0)
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
string emailAddress = null;
var cookie =Request.Cookies[FormsAuthentication.FormsCookieName];
// Nothing to do if no cookie
if (cookie != null)
{
// Decrypt the cookie
var data = FormsAuthentication.Decrypt(cookie.Value);
// Nothing to do if null
if (data != null)
{
// Deserialize the custom data we stored in the cookie
var o = JsonConvert.DeserializeObject<FormsAuthenticationTicketData>(data.UserData);
// Nothing to do if null
if (o != null)
emailAddress = o.EmailAddress;
}
}
SetupAutoFac(emailAddress);
}
答案 5 :(得分:0)
您可以使用javascript的onClick事件来防止浏览器返回。 例如:
<a onclick="noBack()" href="#">Logout</a>
<Script type="text/javascript">
window.history.forward();
function noBack() { window.history.forward(); }
</Script>
希望这对您有帮助,快乐编码!