注销后,当在 mvc 3 asp.net 单击后退按钮时,页面仍显示
本文关键字:按钮 显示 net mvc 当在 asp 注销 单击 | 更新日期: 2023-09-27 17:56:09
我见过很多与此几乎相似的问题。但是,我还没有找到可以解决我问题的答案。
我有一个注销按钮,我使用 Session.Abandon() 和 Session.Clear() 来清除会话。它工作正常。但是,每当我在浏览器上点击后退按钮时,页面仍然显示。但是,它应该显示登录表单,因为用户已经注销。
控制器:
[HttpPost]
public ActionResult LogOut()
{
Session.Clear();
Session.Abandon();
return RedirectToAction("Index", "LogIn");
}
如何解决这个问题?.任何建议都非常感谢。提前谢谢。
您可以在global.asax
中设置 NoCache
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
您可以将其设置为"ServerAndNoCache"以强制浏览器不缓存页面,而是服务器缓存页面,因此服务器上没有额外的负载。
还有另一个线程,我得到了答案防止在 MVC 中使用属性 ASP.NET 特定操作进行缓存
我的解决方案(.Net 6 MVC)如下:
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] 添加到我想要的控制器中。
我选择这个是因为它提供了对我想禁用缓存的位置的更精细的控制,但如果您想为整个解决方案执行此操作,它必须使用中间件完成(在启动时.cs)https://learn.microsoft.com/en-us/aspnet/core/performance/caching/middleware?view=aspnetcore-7.0
app.UseResponseCaching();
app.Use(async (context, next) =>
{
context.Response.GetTypedHeaders().CacheControl =
new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
{
NoStore = true,
NoCache = true,
};
await next();
});