Да, это возможно (хотя может и не быть такой большой идеей, как вы думаете). Вот один из способов сделать это:
Когда пользователь подписывается, сохраните значение в состоянии приложения, которое связывает его идентификатор сеанса с его идентификатором пользователя.
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");
}
Когда пользователь пытается получить доступ к странице, но имеет неправильный идентификатор сеанса, его сеанс будет убит.
Уловка здесь ... ваше состояние приложения будет продолжать расти по мере входа пользователей. Вам нужно будет разработать некоторые способы обнаружения, когда пользователи будут подписаны и очищены, или вам придется регулярно перерабатывать свой AppPool.
Не используйте сеанс для учетной записи –
Итак, что мне делать? –
Вы не должны запрещать логирование пользователя несколько раз в нескольких браузерах. Но вы можете проверить, что пользователь является логином или нет ('if (Request.IsAuthenticated) {}'), и получить текущий идентификатор пользователя ([проверить это] (http: //stackoverflow.com/a/26739821/5606916)). Кроме того, вы можете использовать атрибуты '[Authorize]/[AllowAnonymous]' в вашем контроллере/действии. –