ASP.NET阻止同一用户多次登录

时间:2011-06-14 08:14:50

标签: asp.net asp.net-mvc security forms-authentication

我需要一个ASP.NET Web应用程序,不允许多次登录同一个用户。我认为这是为了防止人们共享用户名和密码。

我遇到的问题是,除非用户明确退出系统,否则很难判断他是否仍然登录并使用系统。

因此,我能想到实现这一目标的唯一可靠方法是每次用户与系统进行交互时锁定用户ID,IP地址和时间戳,并锁定不是来自该IP地址的其他人如果他们尝试在此表中记录的最后一个日期的十分钟内登录。

有人能想出更好的方法来管理这个吗?

3 个答案:

答案 0 :(得分:6)

如果您使用ASP.NET MembershipProvider,您可以执行以下操作:

    protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
    {
        if (Membership.ValidateUser(Login1.UserName, Login1.Password))
        {
            int time = Membership.UserIsOnlineTimeWindow;

            MembershipUser user = Membership.GetUser(Login1.UserName, true);
            if (user != null)
            {
                if (user.IsOnline)
                {
                    lblMessaggeIsOnLine.Visible = true;
                    e.Cancel = true;
                }
                else
                    lblMessaggeIsOnLine.Visible = false;
            }
        }
    }

答案 1 :(得分:1)

如果会话状态模式不是SqlServer,则可以在global.asax中使用SessionEnd事件。

例如:

你的配置:

<sessionState timeout="15"></sessionState>

15分钟后,您的会话事件被触发,您可以注销用户

答案 2 :(得分:1)

你是对的。您需要管理用户登录并采取相应措施。让我知道您是使用自己的提供程序还是使用ASP.NET提供程序。默认提供程序中包含一些选项。