用户退出后如何停止后退按钮? (LOGOUT按钮在母版页中) 使用webforms
我有几页,最后一页是最后一页,退出后我点击后退按钮显示上一页。我如何避免这一点。请帮助我解释代码
代码只需在LOGOUT之后触发。用户必须能够返回,如果他在进入时必须进行任何更改,请查看上一页。
答案 0 :(得分:20)
您应该设置正确的HTML标头。根据{{3}},这些是适用于所有浏览器的:
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
您可以这样设置:
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate");
HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
HttpContext.Current.Response.AddHeader("Expires", "0");
答案 1 :(得分:0)
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
答案 2 :(得分:0)
<script>
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
</script>
它可能适合你
答案 3 :(得分:0)
此方法仅适用于MVC网站
这是我使用的方法
将以下过滤器添加到FilterConfig(假设您使用的是MVC)
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
现在装饰用户可以使用的操作方法,而无需使用
登录 [AllowAnonymous]
请务必装饰您登录和注册方法。
现在,当用户点击后(假设页面刷新),他们将被要求再次登录。 我不允许我的页面被缓存强制刷新后退按钮。
希望这对你有所帮助
答案 4 :(得分:0)
即使在浏览器中按下后退按钮(在crome中测试)也能完美地工作
我使用了会话变量,并且还禁用了缓存
第1页(default.aspx)登录表单,我收集会话变量ID
Session["id"] = TextBox1.Text;// just the username</pre>
page 2(Default2.aspx) in page load
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddDays(-1));
Response.Cache.SetNoStore();
if (Session["id"] == null)
{
Response.Redirect("Default.aspx");// redirects to page1(default.aspx)
}
else
{
Label1.Text = (string)Session["id"];//just display user name in label
}
}
在第2页退出按钮
protected void Button1_Click(object sender, EventArgs e)
{
Session["id"] = null;
Response.Redirect("/WebSite5/Default.aspx");//redirects to page1(default.aspx)
}
答案 5 :(得分:0)
尝试了很多解决方案,但只有下面的解决方案得以解决。在注销页面中添加了以下java脚本。所有其他解决方案在IE以外的浏览器中都能正常工作
window.onunload = function() {
window.location.href = "<%=request.getContextPath()%>/logout.jsp";
};
答案 6 :(得分:0)
我知道这是一个旧线程,但有人可能会帮助这个。您可以使用javascript事件windows.hash更改来阻止后退按钮。
<script>
var history_api = typeof history.pushState !== 'undefined';
if (location.hash == '#no-back') {
if (history_api) history.pushState(null, '', '#stay')
else location.hash = '#stay'
window.onhashchange = function () {
if (location.hash == '#no-back') {
alert('Action cannot be done!');
if (history_api) history.pushState(null, '', '#stay')
else location.hash = '#stay'
}
}
}
</script>
您可以访问here获取完整教程
答案 7 :(得分:0)
试试这个我发现这种防止反击的最佳方法。在codeproject中得到了这个解决方案。
使用这些常用方法注销时清理会话值。
Session.Abandon();
Session.Clear();
Session.RemoveAll();
System.Web.Security.FormsAuthentication.SignOut();
Response.Redirect("frmLogin.aspx", false);
在ASPX页面上,我使用带有JSON的Jquery并使用LogoutCheck()WebMethod检查Session值。
<script type="text/javascript">
$(document).ready(function () {
CheckingSeassion();
});
function CheckingSeassion() {
$.ajax({
type: "POST",
url: "frmLogout.aspx/LogoutCheck",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
if (response.d == 0) {
window.location = '<%= BaseURL %>' + "frmLogin.aspx";
}
},
failure: function (msg) {
alert(msg);
}
});
}
LogoutCheck()WebMethod在客户端加载时检查应用服务器的会话值。
我在frmLogout.aspx页面上创建了这个方法,如下所示:
[WebMethod]
public static int LogoutCheck()
{
if (HttpContext.Current.Session["user"] == null)
{
return 0;
}
return 1;
}
现在,当用户注销页面时,它会重定向到注销页面并清除并放弃会话值。现在,当用户单击浏览器的后退按钮时,客户端仅加载,在此期间,CheckSession()WebMethod在JQuery中触发,并检查会话值LogoutCheck()WebMethod。当会话为null时,该方法返回零,页面在登录页面中再次重定向。因此,我不必清除缓存或清除用户浏览器的任何历史记录。