jquery 当点击返回按钮时,退出后页面仍显示asp.net mvc 3

uyhoqukh  于 2022-12-18  发布在  jQuery
关注(0)|答案(3)|浏览(115)

我见过很多类似的问题,但是,我还没有找到一个答案来解决我的问题。
我有一个注销按钮,我使用了Session.Abandon()和Session.Clear()来清除会话。它工作正常。但是,每当我点击浏览器上的后退按钮时,页面仍然显示。但是,它应该显示登录表单,因为用户已经注销了。
控制器:

[HttpPost]
public ActionResult LogOut()
{
     Session.Clear();
     Session.Abandon();
     return RedirectToAction("Index", "LogIn");
}

如何解决这个问题?。任何建议都是高度赞赏。提前感谢。

ivqmmu1c

ivqmmu1c1#

可以在global.asax中设置NoCache

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}
carvr3hs

carvr3hs2#

您可以将其设置为“ServerAndNoCache”来强制浏览器不缓存页面,而由服务器缓存页面,这样服务器上就没有额外的负载。

pengsaosao

pengsaosao3#

还有另一个线程,我得到了这个Prevent Caching in ASP.NET MVC for specific actions using an attribute的答案
我的解决方案(.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]添加到我想要的控制器。
我之所以选择此选项,是因为它可以更好地控制要禁用缓存的位置,但如果您希望对整个解决方案执行此操作,则可以使用中间件(在Startup.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();
            });

相关问题