2014-02-19 2 views
2

Я работаю над веб-сайтом для проекта колледжа. Я хочу добавить функцию на свой веб-сайт проекта.Одиночный вход в asp.net

Когда пользователь регистрируется на веб-сайте, все остальные логины для одной и той же учетной записи пользователя должны быть выведены из системы, т. Е. За один раз должно быть разрешено только один логин на одну учетную запись.

Когда один и тот же идентификатор пользователя пытается войти на несколько устройств, как мне убить сеанс на другом устройстве?

+0

Не могли бы вы пояснить, предположим, что пользователь зарегистрировался? Теперь, если другой пользовательский логин на сайт, то UserA будет автоматически выведен из системы ??? – Gerry

+0

, если пользователь A - это логин из какого-либо места X, а затем он снова делает регистрационную форму Y, тогда логин из A должен быть выведен из системы. – user2788596

+1

Пожалуйста, поставьте дополнительную информацию. Что вы пробовали? Что не сработало? Этот вопрос не отвечает, поскольку он – Martijn

ответ

0

Вы можете выйти из ситуации, делая что-то вроде этого:

Идея

Всякий раз, когда пользователь входит в систему на их счет мы храним их имя вместе с их 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"); 
} 
Смежные вопросы