我有一个MVC站点(MVC 4)并且我需要阻止这个问题。 将该网站视为一个应用程序流程网站(即您申请某些内容并需要填写一系列详细信息并逐步完成)
因此,当用户点击此页面上的提交时:
认证
它需要他们“选择产品”页面。然后当他们点击选择产品提交时,它会将它们带到“数量”页面。
现在,我已将[NoCache]属性应用于这些操作方法。 NoCache属性如下:
public sealed 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.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
}
这确实适用于我想要的东西(即不缓存页面)。
问题是,如果他们点击后退按钮,它可以:
如果他们点击后退按钮,我想抓住他们刚来的页面,这样我就可以告诉他们他们不能这样做了。
问题是,当发生这种情况时 - UrlReferrer实际上是首先将它们带到页面的页面,即:
详细信息 - >资格 - >选择产品 - >量
如果他们进入资格认证,然后选择产品,并在选择产品页面上,他们回到浏览器,资格操作方法(GET)有详细信息的UrlReferrer。这确实有意义,因为从技术上来说,它确实来自它。
如何检查他们是否点击后退按钮或来自其他页面(即选择产品)?我需要防止这种情况发生,如果他们点击浏览器中的后退按钮,则将其指向自定义页面。
谢谢