当单击后退按钮时,退出后页面仍然显示 - asp.net mvc 3
当单击后退按钮时,退出后页面仍然显示 - asp.net mvc 3
我看到了很多几乎和这个问题相似的问题,但是没有找到一个可以解决我的问题的答案。
我有一个退出按钮,我使用Session.Abandon()和Session.Clear()来清除会话。它工作得很好。但是,每当我点击浏览器的返回按钮时,页面仍然显示。但是,它应该显示登录表单,因为用户已经退出登录。
控制器:
[HttpPost] public ActionResult LogOut() { Session.Clear(); Session.Abandon(); return RedirectToAction("Index", "LogIn"); }
如何解决这个问题?非常感谢任何建议。提前谢谢。
问题出现的原因是在ASP.NET MVC 3中,当用户点击返回按钮时,页面仍然显示,即使已经注销登录。解决方法是通过添加一个自定义的NoCacheAttribute属性来禁用缓存,并将其应用于需要禁用缓存的控制器上。
解决方法中的代码如下:
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; using System; namespace YourSolutionName.Web.Mvc.Controllers.Attributes { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public sealed class NoCacheAttribute : ActionFilterAttribute { public override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.HttpContext.Response.GetTypedHeaders().CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue() { NoStore = true, NoCache = true, }; base.OnResultExecuting(filterContext); } } }
然后,将[NoCache]属性添加到需要禁用缓存的控制器上。
如果希望在整个解决方案中禁用缓存,可以使用中间件。在Startup.cs文件中添加以下代码:
app.UseResponseCaching(); app.Use(async (context, next) => { context.Response.GetTypedHeaders().CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue() { NoStore = true, NoCache = true, }; await next(); });
通过使用这些方法,可以解决在ASP.NET MVC 3中点击返回按钮后页面仍然显示的问题,并禁用缓存以确保用户注销登录后无法访问页面缓存。
问题原因:浏览器缓存了页面,导致在点击返回按钮后仍然显示页面。
解决方法:将缓存设置为"ServerAndNoCache",强制浏览器不缓存页面。这样页面会被服务器缓存,减少了对服务器的额外负载。
代码示例:
Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache); Response.Cache.SetNoStore();
以上代码将缓存设置为"ServerAndNoCache",并禁止在浏览器中存储缓存。
这样,在用户点击返回按钮后,浏览器将不会从缓存中获取页面,而是从服务器重新加载页面。这解决了页面在注销后仍然显示的问题。
问题的原因:在ASP.NET MVC 3中,当用户点击浏览器的后退按钮时,页面仍然显示已注销的页面。
解决方法:在global.asax文件中设置NoCache,代码如下:
protected void Application_BeginRequest() { Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); Response.Cache.SetNoStore(); }
这种方法的唯一缺点是它在应用程序级别上设置了nocache。
参考链接:[stackoverflow.com/questions/16337149/…](http://stackoverflow.com/questions/16337149?rq=1)
这种方法相当于从头开始运行整个系统,而不依赖缓存,这会加快页面的检索速度。
是否依赖缓存会降低性能?