Hallo, ich entwickle zum ersten Mal eine Lösung in MVC, also stehe ich vor einem großen Problem, Wenn ich mich von meiner Anwendung (mvc razor-Webanwendung) abmelden, wird die Anmeldeseite angezeigt. Wenn ich jedoch die Zurück-Schaltfläche des Browsers drücke, erscheint der letzte Bildschirm Ich möchte das nicht, ich möchte, wenn ich die Zurück-Taste drücke, es wird immer noch dieselbe Anmeldeseite angezeigt. Hier ist mein Code für die Abmeldung
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");
}
Ich hatte dieses Problem vor einiger Zeit, das Deaktivieren des Cache für die gesamte Anwendung löste mein Problem. Fügen Sie diese Zeile einfach zur Global.asax.cs
-Datei hinzu
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
Hoffe das hilft.
Sie müssen den Cache META
-Tag für alle zuletzt besuchten Seiten hinzufügen
Fügen Sie dies für alle Seiten hinzu, indem Sie ein CustomAttribute wie [NoCache]
erstellen und dekorieren
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();
}
}
Oder probiere es mit Javascript auf der Seite
<SCRIPT type="text/javascript">
window.history.forward();
function noBack() { window.history.forward(); }
</SCRIPT>
<BODY onload="noBack();"
onpageshow="if (event.persisted) noBack();" onunload="">
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
sie können onClick-Ereignis von Javascript verwenden, um Browser zurück zu verhindern. zum Beispiel:
<a onclick="noBack()" href="#">Logout</a>
<Script type="text/javascript">
window.history.forward();
function noBack() { window.history.forward(); }
</Script>
Hoffe das wird dir helfen, Happy Coding!
Der einfachste Weg für eine MVC 5-Anwendung ist:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
Über jeder Controller-Methode, die Sie nicht zwischenspeichern möchten. Oder wenn Sie .Core verwenden, gehen Sie wie folgt vor:
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
Einen schönen Tag noch!
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);
}