2017-02-14 10 views
0

Я хочу, чтобы несколько логинов для пользователей с одинаковыми именами и паролями. Пример:как предотвратить вход пользователя с той же учетной записью в ASP.NET MVC

Пользователь A с учетной записью «A», сеанс [«AccountA»] создает (около 30 минут). После входа пользователя B с учетной записью «A» Session [«AccountA»] создает и сеанс [«AccountA»] таймаута пользователя A.

+2

Не используйте сеанс для учетной записи –

+0

Итак, что мне делать? –

+0

Вы не должны запрещать логирование пользователя несколько раз в нескольких браузерах. Но вы можете проверить, что пользователь является логином или нет ('if (Request.IsAuthenticated) {}'), и получить текущий идентификатор пользователя ([проверить это] (http: //stackoverflow.com/a/26739821/5606916)). Кроме того, вы можете использовать атрибуты '[Authorize]/[AllowAnonymous]' в вашем контроллере/действии. –

ответ

0

Да, это возможно (хотя может и не быть такой большой идеей, как вы думаете). Вот один из способов сделать это:

Когда пользователь подписывается, сохраните значение в состоянии приложения, которое связывает его идентификатор сеанса с его идентификатором пользователя.

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.

 Смежные вопросы

  • Нет связанных вопросов^_^