2009-11-03 2 views
0

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

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

ответ

0

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

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

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

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

+0

Я могу сохранить sessionID в моей базе данных. Если пользователь выходит из системы, он удаляется. Но если сеанс пользователя заканчивается, sessionID остается там. Итак, когда пользователь входит в систему, я должен проверить, отличается ли текущий sessionId, чем тот, что был в базе данных, и закончился ли тайм-аут сеанса, если я также сохраняю дату и время входа пользователя в систему, правильно? – gong

+0

Хм, вроде. Не существует ни одного решения. То, как я смотрел на это, заключалось в том, что когда пользователь входит в систему, вам особенно неинтересно, какая сессия была до сих пор, поскольку этот сеанс теперь недействителен, и пользователь («старый» сеанс) должен быть принудительно выведен из системы. Что вам нужно, так это то, является ли комбинация сеанса пользователя * и * действительной, когда вы делаете запрос. – Murph

3

Это article обеспечивает возможное решение.

+0

Вы получаете upvote 'cos, что делает что-то похожее на мое предложение и имеет код! – Murph

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