Обеспечение входа только одного пользователя с помощью поставщика членства ASP.Net

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

Предполагается, что файлы cookie являются постоянными.


person Brian Liang    schedule 19.11.2008    source источник


Ответы (3)


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

Ключевым моментом является то, что вы должны знать, в какой момент пользователь в последний раз что-то делал ИЛИ выходил из системы. Оттуда вы можете определить, действительно ли учетная запись готова. Если вы настроили отслеживание этих элементов в коде, вы можете изменить поставщика членства, чтобы убедиться, что учетная запись может входить в систему.

person Mitchel Sellers    schedule 19.11.2008

Концептуально вы должны решить, как вы хотите ответить. Если у вас есть пользователь A, а затем пользователь B пытается войти (используя те же учетные данные), вы:

  1. Выкинуть пользователя A

or

  1. Не разрешать вход от пользователя B

(2) проблематично, потому что вам нужно достоверно знать, что пользователь A вышел из системы, чтобы определить, следует ли входить в систему с пользователем B. Пользователь A может какое-то время просто просматривать страницу на вашем сайте, поэтому выполнение со временем может быть не лучшим . Может быть, какой-то сторожевой таймер AJAX, который проверяет ваш сайт каждые 30 секунд.

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

person TAG    schedule 19.11.2008

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

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

Я планирую ночной процесс удаления старых идентификаторов из таблицы

person Juan    schedule 20.09.2012