如何允许每个用户只有一个活动会话

时间:2013-10-30 14:25:38

标签: c# asp.net session login global-asax

我想实现一个代码,每个用户只能启用一个会话。 我使用asp.net进行表单身份验证。

我读过这篇文章: Limit only one session per user in ASP.NET

但是我想做相反的事情,断开所有以前的会话。

这是我的代码:

void Application_Start(object sender, EventArgs e) 
{
    Application["UsersLoggedIn"] = new System.Collections.Generic.Dictionary<string, string>(); }

当用户登录时,我插入一条记录:username,sessionID。 如果用户名存在,我只需更新sessionID

    void Application_BeginRequest(object sender, EventArgs e)
    {
        System.Collections.Generic.Dictionary<string, string> d = HttpContext.Current.Application["UsersLoggedIn"] as System.Collections.Generic.Dictionary<string, string>;
        if (d != null)
        {
            if (d.Count > 0)
            {
                    string userName = HttpContext.Current.User.Identity.Name;
                    if (!string.IsNullOrEmpty(userName))
                    {
                        if (d.ContainsKey(userName))
                        {
                            if (d[userName] != HttpContext.Current.Session.SessionID)
                            {
                                FormsAuthentication.SignOut();
                                Session.Abandon();
                            }
                        }
                    }
}
}

但我得到空的HttpContext.Current.User。 我也试过“AuthenticatedRequest”,但后来我得到了空的Session。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果要访问HttpContext.Current.User和Session,则应使用AcquireRequestState事件。

答案 1 :(得分:2)

如果您处于负载均衡的情况,并且您需要以某种方式保留此服务器,那么当您需要释放用户锁(在用户会话终止或注销时)时会出现问题。