2013-07-05 30 views
0

我已经寻找关于如何禁用或阻止后退按钮功能的解决方案,但是这些解决方案中的很多不适用于新浏览器或者不适用于防呆功能。防止ASP中的后退按钮功能

我曾经想过创建一个sessionid,并在用户登录时将它提供给用户,并将其与登录时间一起存储到数据库中,并将其授予“活动”状态。在注销时,数据库中的会话状态将更改为“不活动”。该检查将发生在我的所有成员页面中,如果用户的登录状态为“非活动状态”,它们将被重定向到登录页面。

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

在此先感谢您的任何答案。

+0

笏你想完成?阻止用户在注销或超时后获取站点访问权限?防止产品重复订单或收费? – HABO

+0

@HABO阻止访问“会员”页面登出 – Damienn

+0

您可能会看到以下问题。它可以帮助你http://stackoverflow.com/questions/7405953/how-to-implement-prg-pattern-properly-in-asp-net-webforms – Tassadaque

回答

1

是的,当用户在浏览器中按下Back按钮时,会触发Page_Load事件。因此,如果您在任何成员页面的Page_Load中放置正确的会话检查逻辑,那么您应该很好。这将解释用户注销的场景,从而导致其无效SessionSession实际从非活动状态到期。

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(); 
} 

或者,按照它..

0

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

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