如何防止用户在ASP.NET MVC中使用相同的帐户登录

时间:2017-02-14 00:54:14

标签: asp.net asp.net-mvc asp.net-mvc-4

我想阻止具有相同用户名和密码的用户多次登录。示例:

用户登录帐户" A",会话[" AccountA"]即可创建(约30分钟)。用户B使用帐户" A" ,会话[" AccountA"]是用户A超时的创建和会话[" AccountA"]。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的(虽然可能不像你想的那么好)。这是一种方法:

当用户登录时,将值存储在应用程序状态,该值将其会话ID绑定到其用户ID。

var context = HttpContext.Current;
var lookup = String.Format("Session_{0}", userID);
Application.Lock();
Application[lookup] = context.Session.SessionID;
Application.Unlock();

当用户请求页面(并且未登录)时,请检查绑定是否正确。如果没有,请终止会话。

var context = HttpContext.Current;
var lookup = String.Format("Session_{0}", userID);
var sessionID = Application[lookup] as string;
if (sessionID != context.Session.SessionID)
{
    context.Session.Abandon();
    var c = new HttpCookie(FormsAuthentication.FormsCookieName,"DELETED");
    c.Expires = System.DateTime.Now.AddDays(-2);
    context.Response.AppendCookie(c);
    context.Response.Redirect("~/logout.aspx");
}

当用户尝试访问某个页面但会话ID错误时,他的会话将被终止。

这里的诀窍是......当用户登录时,您的应用程序状态将继续增长。您需要设计一些方法来检测用户何时注销并清理它,或者您需要定期回收AppPool。