我正在使用FormsAuthentication for userlogin。 用户成功注销后我遇到问题后退按钮是浏览器允许用户查看页面。 我尝试使用javascript
<script type = "text/javascript" >
function preventBack() { window.history.forward(1); }
setTimeout("preventBack()", 0);
window.onunload = function () { null };
</script>
但后退按钮完全禁用。 它工作了,我不想在用户登录时禁用后退按钮功能。我希望我的LOGGED IN用户正常使用浏览器后退按钮。但是一旦他选择退出,他就不允许通过按Back来查看任何内容。 我也尝试过使用
Session.Abandon();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now);
但这也没有用。我该解决这个问题吗?
答案 0 :(得分:17)
您可以在用户退出时清除浏览器历史记录:
var url = window.location.href;
window.history.go(-window.history.length);
window.location.href = url;
然而,这不会特别强大 - 它依赖于javascript,它不适用于多个标签,并且可能仅用于骚扰用户。 IMO最好的办法是设置适当的缓存标题,以便浏览器不会通过适当应用的NoCacheAttribute缓存任何“登录”页面:
public 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);
}
}
答案 1 :(得分:7)
在html页面中使用此代码,您需要在其中控制后退按钮。
$().ready(function() {
if(document.referrer != 'http://localhost:8181/'){
history.pushState(null, null, 'login');
window.addEventListener('popstate', function () {
history.pushState(null, null, 'login');
});
}
});
此代码将阻止后退按钮事件。如果上一页为“http://localhost:8181/”,if条件是允许后退按钮。如果上一页不是“http://localhost:8181/”,则后退按钮将不起作用。如果您需要阻止所有以前的页面,则避免使用if条件。 history.pushState 语句会将浏览器地址栏上的网址替换为“登录”。因此,我建议您使用页面网址更改“登录”。
此方法的优点: -
希望我的回答能帮助别人。
答案 2 :(得分:5)
禁用后退按钮不是满足您需求的正确方法。相反,您可以在html文件中添加以下三个标记,负责清除缓存。
<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">
答案 3 :(得分:3)
我找到的最简单方法是使用OutputCache Attribute
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class HomeController : Controller
{
}
答案 4 :(得分:1)
<script language="JavaScript" type="text/javascript">
window.history.forward();
</script>
答案 5 :(得分:0)
请仔细阅读文章http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html。我在我的布局页面中使用了作者提供的javacript函数来防止后退按钮问题,因为我需要为我网站的所有访问者提供对某些页面的访问权限。
此解决方案适用于IE 11和Chrome版本43.0.2357.130 m。
希望这有帮助。
答案 6 :(得分:0)
var url = window.history.forward();
window.history.go(-window.history.length);
答案 7 :(得分:0)
如果您希望所有页面都使用此代码,则可以在Global.asax中编写:
protected void Application_BeginRequest()
{
Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Expires", "0");
}
这不会缓存您网站的任何页面。
答案 8 :(得分:-1)
请在您的母版页加载事件中使用此代码。
if(!IsPostBack)
{
if (Session["LoginId"] == null)
Response.Redirect("frmLogin.aspx");
else
{
Response.ClearHeaders();
Response.AddHeader("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");
Response.AddHeader("Pragma", "no-cache");
}
}
希望它有所帮助! :)