如何在会话超时或结束时注销用户

时间:2010-12-10 22:31:31

标签: asp.net session membership logout

会话结束或过期时注销用户的最佳方法是什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:12)

这实际上取决于您正在寻找的所需功能。我假设您正在使用FormsAuthentication。

您需要关注两件事:会话 FormsAuthentication Cookie。除非我弄错了,否则这两个都有不同的超时。

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

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

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

答案 1 :(得分:1)

如果您使用.net成员资格提供程序,只需在web.config中设置超时设置即可 http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=VS.100).aspx