防止ASP中的后退按钮功能

时间:2013-07-05 03:24:22

标签: c# asp.net

我已经找到了关于如何禁用或阻止后退按钮功能的解决方案,但是这些解决方案中的许多不适用于新浏览器或者不是万无一失的。

我考虑创建一个sessionid,并在用户登录时将其提供给用户,并将其与登录时间一起存储到数据库中,并为其提供一个名为“active”的状态。在注销时,数据库中的会话状态将更改为“非活动”。此检查将在我的所有成员页面中进行,如果用户的登录状态为“非活动”,则会将其重定向到登录页面。

但是,如果按下后退按钮,我不知道这是否有效。页面是否仍会检查会话ID并重定向用户,即使他使用了后退按钮?由于检查将在page_load上进行,我不确定如果我使用后退按钮,page_load事件是否仍会运行

提前感谢您的任何答案。

3 个答案:

答案 0 :(得分:1)

是的,当用户按下浏览器中的Page_Load按钮时,Back事件将会触发。因此,如果您在任何成员页面的Page_Load中放置了正确的会话检查逻辑,那么您应该是好的。这将解释用户注销的情况,从而导致他们SessionSession实际上因不活动而失效。

答案 1 :(得分:1)

你是否试过一些有效的代码?
在客户端

<script type="text/javascript" language="javascript">
window.history.forward(1);
document.attachEvent("onkeydown", keydown_handler);
function keydown_handler()
{
switch (event.keyCode)
{
case 116 : // F5;
event.returnValue = false;
event.keyCode = 0;
window.status = "Disabled F5";
break;
}
}
</script>

代码背后

protected void Page_Load(object sender, EventArgs e)
   {

     HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
     HttpContext.Current.Response.Cache.SetNoServerCaching();
     HttpContext.Current.Response.Cache.SetNoStore();   

   }

protected void Page_Load(object sender, EventArgs e)
{
   Response.Cache.SetCacheability(HttpCacheability.NoCache);
   Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
   Response.Cache.SetNoStore();
}

,关注它..

答案 2 :(得分:0)

不要这样做。尝试禁用后退按钮或任何浏览器功能并不是最佳做法。

为了在注销后避免访问,请在清除会话后尝试转移到另一个特定的“您正在注销”页面。在“您正在退出”页面中,将javascript window.location.replace返回到您的登录页面。