2010-12-10 182 views
12

会话结束或到期时注销用户的最佳方式是什么?如何在会话超时或结束时注销用户

感谢您的任何帮助。

+1

您的意思是简单地让一个用户成为未经过身份验证的用户,或者实际上将用户重定向到某些“嘿,你已经超时了!”他们等了很长时间并且他们的会话已经过期之后的页面? – Pandincus 2010-12-10 22:48:41

+0

两者如果可能? – zSynopsis 2010-12-10 23:14:25

+0

当会话结束时,他们所做的下一个请求将是未验证的。在这种情况下,您的页面可以在加载新页面时检查该页面。要重定向它们,如果它们在同一页面上的时间太长,则需要将JavaScript写入具有等于会话超时值的倒数计时器的页面。当计时器达到零重定向时,因为会话无效。 (有点 - 有一点需要注意的是,如果他们在另一个选项卡中浏览您的网站 - 这将使会话保持活跃状态​​,而第一个标签javascript仍会倒数) – Prescott 2010-12-11 03:13:41

回答

11

这真的取决于你在寻找所需的功能。我假设你正在使用FormsAuthentication。

有你需要关注的两个独立的东西:会议FormsAuthentication饼干。除非我错了,否则这两者都有单独的超时。

如果您遇到的问题是,会话超时,但用户仍然通过验证,你可以尝试以下的组合:

1:确保身份验证Cookie具有相同的超时值作为会话:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2:在你的Page_Load事件中,检查是否会话超时:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(见http://www.eggheadcafe.com/articles/20051228.asp以获取关于检测会话超时的信息)

如果您想要更愉快的用户体验,可以使用javascript在X分钟后启动某种模式UI弹出窗口。这个弹出窗口只允许用户启动一个按钮点击,这将触发服务器上的AJAX回发,从而扩展其身份验证和会话cookie,而不必重新加载页面。我从来没有实现过,但看看, this guy made an ASP.NET AJAX control

+0

Thanks Pandincus – zSynopsis 2010-12-13 23:32:02