2011-06-14 82 views
1

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

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

因此,我可以想到的唯一可靠的方式来实现这一点是每次用户与系统进行交互并锁定其他任何不是来自该IP的人时,将数据库用户ID,IP地址和时间戳记登录到数据库如果他们尝试在本表中记录的最后日期的十分钟内登录,则为他们的地址。

任何人都可以想到一个更好的方法来管理这个?

回答

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

你可以在Global.asax中使用SESSIONEND事件,如果你的会话状态模式是不SqlServer的。

例如:

你的配置:

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

15分钟后,你的SESSIONEND事件触发,你可以注销用户

1

你是对的。您需要管理用户登录并采取相应的行动。让我知道您是使用自己的提供者还是使用ASP.NET提供者。默认提供者在其中有一些选项。