Вы можете выйти из ситуации, делая что-то вроде этого:
Идея
Всякий раз, когда пользователь входит в систему на их счет мы храним их имя вместе с их ID сессии. В следующий раз, когда кто-то, кто войдет в систему, попытается сделать запрос, мы проверим, совпадает ли его идентификатор сеанса с идентификатором сеанса, который мы сохранили для них. Если это несоответствие, это означает, что кто-то еще вошел в систему после них! Таким образом, мы можем безопасно вывести их из системы.
по выполнению
Мы будем использовать 3-х вещей. Session ID: Позволяющие отличить кто-просматривающие экземпляру
Global.asax: захватить Session Завершающее событие
One Storage Расположение:
HttpContext.Current.Application
Database
Если ваш веб-сайт работает на одном сервере, вы можете просто использовать приложение, но если его запустить несколько, вам придется искать базу данных. Код показывает, что это делается для приложения. Когда пользователь входит в систему вам необходимо хранить идентификатор сессии:
UserAccout ua = GetUserAccount();
HttpContext.Current.Application["usr_" + ua.UserName] = HttpContext.Current.Session.SessionID;
И когда они выйти нам нужно, чтобы очистить его:
UserAccout ua = GetUserAccount();
HttpContext.Current.Application.Remove("usr_" + ua.UserName);
В вашем Global.asax файл, который вы должны вызвать тот же самый выход код, чтобы очистить их, когда сессия заканчивается
void Session_End(object sender, EventArgs e)
{
UserAccout ua = GetUserAccount();
if (ua != null)
{
HttpContext.Current.Application.Remove("usr_" + ua.UserName);
}
}
и теперь, что нам нужно на самом деле проверить, если пользователь должен быть изгнан или нет, так что выполнить это в начале всех REQ uests:
UserAccout ua = GetUserAccount();
if (!HttpContext.Current.Application["usr_" + ua.UserName].Equals(HttpContext.Current.Session.SessionID))
{
Logout();
HttpContext.Current.Response.Redirect("SignOut.aspx");
}
Не могли бы вы пояснить, предположим, что пользователь зарегистрировался? Теперь, если другой пользовательский логин на сайт, то UserA будет автоматически выведен из системы ??? – Gerry
, если пользователь A - это логин из какого-либо места X, а затем он снова делает регистрационную форму Y, тогда логин из A должен быть выведен из системы. – user2788596
Пожалуйста, поставьте дополнительную информацию. Что вы пробовали? Что не сработало? Этот вопрос не отвечает, поскольку он – Martijn