我想阻止具有相同用户名和密码的用户多次登录。示例:
用户登录帐户" A",会话[" AccountA"]即可创建(约30分钟)。用户B使用帐户" A" ,会话[" AccountA"]是用户A超时的创建和会话[" AccountA"]。
答案 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。