如何在用户注销后停止后退按钮? (注销按钮在母版页) 使用web表单如何在注销后防止浏览器返回按钮?
我有几页,最后一页是最后一页,然后注销后,当我点击后退按钮显示其先前page.How我该避免this.Pls帮助我的代码
代码需要触发后才注销.The用户必须能够回去N参看前一页,如果他有做任何修改,而他的真实loged。
如何在用户注销后停止后退按钮? (注销按钮在母版页) 使用web表单如何在注销后防止浏览器返回按钮?
我有几页,最后一页是最后一页,然后注销后,当我点击后退按钮显示其先前page.How我该避免this.Pls帮助我的代码
代码需要触发后才注销.The用户必须能够回去N参看前一页,如果他有做任何修改,而他的真实loged。
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
<script>
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
</script>
它可能适合你
任何人都可以在其中禁用Javascript浏览器,并且一些浏览器在默认情况下会这样做:) – TheGeekZn
我可以在母版页中给它吗?这需要在注销后触发。如果用户在登入时必须进行任何更改,用户必须能够返回到前一页。 –
只应在注销页面中执行 –
您应该设置正确的HTML标头。据this这些都是在所有浏览器的工作的:
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");
我在哪里添加那段代码?在注销按钮中? –
你可以在你的ASP.NET请求中(在'Page_Load'应该工作,我认为)在代码中设置它。 –
需要更多帮助? –
这种做法将只能与MVC网站工作
这是我使用的方法
将以下过滤器添加到您的FilterConfig(假设您使用的是MVC)
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
现在装饰作用的方法用户可以使用不被记录在
[AllowAnonymous]
一定要装饰你登录和注册方法。
现在,当用户点击回来(假设页面刷新),他们将被要求再次登录。 我不允许在后退按钮上强制刷新页面。
希望这有助于你一点
即使后退按钮在
我使用的会话变量,也是我禁用缓存
浏览器(在克罗姆测试)按工作完美第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)
}
尝试了很多解决方案,但只有下面的解决方案。在注销页面中添加下面的Java脚本。所有其他解决方案将在比IE
window.onunload = function() {
window.location.href = "<%=request.getContextPath()%>/logout.jsp";
};
我知道这是一个古老的线程其他浏览器正常工作,但有人可能会帮助这一点。您可以通过使用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为完整的教程
试试这个我觉得为防止被这种最好的方式。在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;
}
现在,当用户注销页面,它重定向到注销页面并清除并放弃该会话的值。现在,当用户单击浏览器的后退按钮时,客户端仅加载,并且在此期间,CheckingSession()WebMethod在JQuery中触发,并检查会话值LogoutCheck()WebMethod。由于会话为空,该方法返回零,并且页面在登录页面中再次重定向。所以,我不必清除缓存或清除用户浏览器的任何历史记录。
你使用Webforms或MVC吗?我的想法是检查用户是否登录或者不在你想要保护的页面上(比如这个'上一页')。 @PatrickHofman答案中的链接导致结果说**后退按钮历史不是缓存** – TheGeekZn
即时通讯使用Webforms .. –
** [检查了这一点](http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript )。**可能有帮助。 – Bhavik