2012-07-31 4 views
4

У меня есть сайт ASP.NET. Я хочу запретить пользователю входить в систему с тем же именем с двух компьютеров. Если кто-то вошел в систему, а кто-то еще хочет войти в систему с тем же именем, он должен показать ему сообщение о том, что этот пользователь уже зарегистрирован. У меня нет какой-либо проверки подлинности на основе форм или что-то в этом роде. На кнопке «LOG IN» я просто подключаюсь к базе данных и проверяю, действительны ли пользователь и пароль.Как проверить, зарегистрирован ли пользователь в системе?

Я думал, что когда пользователь войдет в систему, я обновил его статус в базе данных, и когда кто-то еще попытается войти в систему, я проверю базу данных, если этот пользователь уже зарегистрирован, но это не очень хорошая идея, потому что, когда пользователь не нажимает кнопку «LOG OUT», он не обновляет свой статус в базе данных, что он неактивен.

Есть ли другой способ сделать это без проверки подлинности форм и что-то в этом роде?

+0

что иначе происходит, когда пользователь входит в систему? есть ли токен сеанса? – MStodd

+0

Да, userId запоминается в переменной сеанса :) – vanilla161

ответ

1

Там нет идеального решения

Вы не можете надежно решить эту проблему, но вы можете приблизиться. Будут крайние случаи, когда законный пользователь будет разочарован этим ограничением.

Что вы можете сделать

Поставщик членства ASP.Net отслеживает последнее время был замечен данный пользователь, то есть в последний раз они были авторизованы и доступ к странице. Вы можете следовать аналогичной стратегии, также отмечая IP-адрес пользователя и, возможно, пользовательский агент браузера.

Если вы видите два разных IP-адреса и/или пользовательские агенты для одних и тех же учетных данных в течение короткого окна (скажем, 20 минут), вы можете предположить, что они, скорее всего, с разных устройств.

Будьте в курсе

Как я уже говорил, есть крайние случаи, когда вы будете неправы. Например, кто-то на мобильном устройстве часто получает новый IP-адрес.

+0

Разве он не сказал, что не хочет использовать поставщик членства в ASP.Net? – Hogan

+0

Я объяснил, как работает членский член ASP.Net, а затем предложил ему сделать что-то подобное себе. –

+0

ОК, я вижу, что вы рекомендуете регулярно обновлять базу данных с помощью activityTime и IPaddress. Звучит неплохо :) Было бы трудно изменить вход в Forms Authentication сейчас, когда проект почти закончен? Я никогда не использовал проверку подлинности с помощью форм. PS. «она», а не «он»;) – vanilla161

1

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

  • На журнал в я бы создать куки сессии для пользователя (скажем, 10 минут), это печенье будет содержать идентификатор в таблице, где я бы хранить их идентификатор пользователя, время входа в систему, и внутрибрюшинно они ссылаются из. Я бы включил эту информацию в файл cookie тоже (с простым шифрованием), при каждой загрузке страницы я бы обновил файл cookie, чтобы продержаться дополнительные 10 минут и проверить учетные данные для базы данных. Это означает, что сеанс будет тайм-аут, если пользователь не получит доступ к веб-сайту каждые десять минут. Это также позволит вам узнать, когда пользователь входил в систему из другого места.

Замечание: почти все вышесказанное позаботится о вас, если вы используете пользовательскую аутентификацию для форм Windows. Использование проверки форм Windows означает, что вам не нужно беспокоиться о тайм-ауте и управлении файлами cookie.

1

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

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