当单击后退按钮时,退出后页面仍然显示 - asp.net mvc 3

8 浏览
0 Comments

当单击后退按钮时,退出后页面仍然显示 - asp.net mvc 3

我看到了很多几乎和这个问题相似的问题,但是没有找到一个可以解决我的问题的答案。

我有一个退出按钮,我使用Session.Abandon()和Session.Clear()来清除会话。它工作得很好。但是,每当我点击浏览器的返回按钮时,页面仍然显示。但是,它应该显示登录表单,因为用户已经退出登录。

控制器:

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

如何解决这个问题?非常感谢任何建议。提前谢谢。

0
0 Comments

问题出现的原因是在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中点击返回按钮后页面仍然显示的问题,并禁用缓存以确保用户注销登录后无法访问页面缓存。

0
0 Comments

问题原因:浏览器缓存了页面,导致在点击返回按钮后仍然显示页面。

解决方法:将缓存设置为"ServerAndNoCache",强制浏览器不缓存页面。这样页面会被服务器缓存,减少了对服务器的额外负载。

代码示例:

Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
Response.Cache.SetNoStore();

以上代码将缓存设置为"ServerAndNoCache",并禁止在浏览器中存储缓存。

这样,在用户点击返回按钮后,浏览器将不会从缓存中获取页面,而是从服务器重新加载页面。这解决了页面在注销后仍然显示的问题。

0
0 Comments

问题的原因:在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)

这种方法相当于从头开始运行整个系统,而不依赖缓存,这会加快页面的检索速度。

是否依赖缓存会降低性能?

0