ASP.NET MVC, разрешающий только одному зарегистрированному пользователю

У меня есть опыт работы с CakePHP, и теперь я начал программировать на платформе ASP.NET MVC. У меня проблема с системой входа. Как я могу запретить пользователям одновременно регистрироваться в моей системе только один раз?

Я могу создать поле в своей БД, где клиент становится активным при входе в систему. Если он выходит из системы, я могу сделать активным ложным. Но что, если сессия просто закончилась? Как я могу поймать это?


person Harris    schedule 03.11.2009    source источник


Ответы (2)


Это, к сожалению, является проблемой из-за того, как реализовано событие завершения сеанса, поскольку у вас нет доступа к необходимой информации, когда они срабатывают.

Так что немного переверните проблему с ног на голову, если вы отследите сеанс, в котором они в последний раз входили в систему, а затем, если вы получите запрос от того же аутентифицированного пользователя в другом сеансе, удалите аутентификацию для этого сеанса (фактически более старый сеанс) с соответствующим перенаправлением на подходящее сообщение.

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

Детали немного сложнее, но вы можете выполнить тест на уровне запроса или добавив свой собственный базовый класс страницы, извлекая из него все свои «настоящие» страницы и проверяя событие страницы.

person Murph    schedule 03.11.2009
comment
Я могу сохранить идентификатор сеанса в своей базе данных. Если пользователь выходит из системы, он удаляется. Но если сеанс пользователя заканчивается, идентификатор сеанса остается там. Поэтому, когда пользователь входит в систему, я должен проверить, отличается ли текущий идентификатор сеанса от идентификатора в базе данных, и закончился ли тайм-аут сеанса, предполагая, что я также сохраняю дату и время регистрации пользователя, правильно? - person Harris; 03.11.2009
comment
Хм, вроде. Нет единого решения. Я смотрел на это так: когда пользователь входит в систему, вам все равно, какая сессия была активной раньше, потому что эта сессия теперь недействительна, и пользователя (старого сеанса) необходимо принудительно разлогинить. Что вас волнует, так это то, допустима ли комбинация сеанса пользователя и, когда вы делаете запрос. - person Murph; 03.11.2009

Эта статья предлагает возможное решение.

person pmarflee    schedule 03.11.2009
comment
Вы получаете положительный отзыв, потому что он делает что-то похожее на мое предложение и имеет код! - person Murph; 03.11.2009