在我的asp.net mvc项目中,当登录用户注销并按回按钮时,他们可以返回页面并访问需要您登录的数据。
我已将此页面添加到默认页面:
HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetValidUntilExpires(true);
这是我对退出控制器的调用:
Welcome <b><%= Html.Encode(Page.User.Identity.Name)%></b>!
<%-- [ <%= Html.ActionLink("Logout", "Logout", "Home")%> ] --%>
<a href="#" onclick="Javascript:DisableHistory()"> Logout</a>
function DisableHistory() {
alert("testing123");
window.history.forward(1);
window.location = "http://localhost/test.web/Home.aspx/Logout";
}
public ActionResult Logout()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
这只发生在firefox中。如何避免缓存该页面。
答案 0 :(得分:2)
正确的方法是返回响应标头而不是修改HTML页面。
创建一个新属性:
public class DisableCacheAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Pragma", "no-cache");
filterContext.RequestContext.HttpContext.Response.AddHeader("Expires", "-1");
filterContext.RequestContext.HttpContext.Response.AddHeader("Cache-Control", "no-cache, no-store");
base.OnActionExecuting(filterContext);
}
}
并将其用于您的行动:
[DisableCache]
public ActionResult YourMethod()
{
return new Content("This is not cached");
}
此属性也适用于具有更积极缓存的IE。
答案 1 :(得分:0)
请设置FireFox的标题
context.Response.Headers.Add("Cache-Control", "no-cache");
context.Response.Headers.Add("PRAGMA", "no-cache");