2

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

我读了这篇文章: 在 ASP.NET 中每个用户只限制一个会话

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

这是我的代码:

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

当用户登录时,我插入一条记录:用户名,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”,但后来我得到了空会话。

有什么想法吗?

4

2 回答 2

3

如果你想访问 HttpContext.Current.User 和 Session,你应该使用AcquireRequestState事件。

于 2013-10-30T14:50:35.227 回答
2

如果您处于多台服务器的负载平衡情况下,您将希望以某种方式保持这种状态,那么当您需要释放用户锁定(在用户会话终止或注销时)时就会出现问题。

于 2013-10-30T15:59:00.177 回答