Техника входа пользователя C # Win App - PullRequest
1 голос
/ 08 января 2009

HI, Я делаю ERP-решение в C # (2.0) приложении Windows и базе данных SQL2005. Сетевое приложение обменивается данными через базу данных. Я использовал обычную технику для входа и выхода пользователя из системы, сохраняя бит состояния. Моя проблема в том, что когда мое приложение прерывалось по любой другой причине статус пользователя может не измениться. Это может привести к тому, что пользователь не сможет войти в следующий раз. Как я могу решить эту проблему? Не могли бы вы дать какую-нибудь новую технику для манипулирования пользователями?

Ответы [ 4 ]

2 голосов
/ 08 января 2009

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

Лучшая реализация - сохранить сеанс и указать время ожидания. (то есть, если сеансу длится x минут, аннулируйте его.) Тогда вы не увидите «фантомных входов» из старых потерянных соединений - они автоматически истекают.

1 голос
/ 08 января 2009

Если вы намерены запретить совместное использование одного имени пользователя на разных компьютерах, после входа в систему с действительным паролем зарегистрируйте уникальный токен на этом компьютере в staff.last_logged_at = @ unique_token . Выйдя из системы, установите staff.last_logged_at = ''. Таким образом, даже если компьютер был прерван (сбой программы из-за вируса, или случайно нажал кнопку сброса компьютера и т. Д., Следовательно, last_logged_at не был сброшен в ''), пользователь все еще может войти в систему, просто проверьте, есть ли токен компьютер, на котором в данный момент находится пользователь, совпадает с last_logged_at. Если это то же самое, он / она может войти в систему.



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



Теперь сценарий, если компьютер зависает очень тяжело (процессор тает, сбой жесткого диска, требуется переустановка ОС и т. Д.). Пользователь должен иметь возможность использовать другие компьютеры. Сделайте административный модуль , который может сбросить last_logged_at пользователя.



Для @unique_token просто используйте на компьютере все, что является уникальным и постоянным , скажем, MAC-адрес, или хэшируйте что-нибудь в настройках ОС.



псевдокод:

Logging In:

if (select count(*) from staff where staff_name = @staff_name and password = 'correct' and (last_logged_at = '' or last_logged_at = @unique_token) ) <> 0 then then

    -- allow login          
    update staff set last_logged_at = @unique_token where staff_name = @staff_name



else if (select count(*) from staff where staff_name = @staff_name and password = 'correct' and last_logged_at <> @unique_token) <> 0 then then

    -- disallow login
     throw exception "You cannot use the same user name on two or more computers.   Contact the administrator if you have any concerns"

else

    -- disallow login
    throw exception "Wrong password"

end if


Logging Out:

update staff set last_logged_at = '' where staff_name = @staff_name
1 голос
/ 08 января 2009

Здесь есть два общих ответа:

  • если вы пытаетесь войти в систему и уже вошли в систему, предложите прервать (сбросить) существующую учетную запись
  • использовать опрос / тайм-аут - то есть приложение должно вызывать метод каждые 2 минуты (например), который обновляет «последний услышанный»; если вы не слышали от кого-то в течение 5 минут (например), снимите флажок
0 голосов
/ 08 января 2009

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

Должен признать, что в моем приложении для Windows есть часть, в которой разрешен только один пользователь. Чтобы увидеть, подключены ли другие пользователи, я использую что-то вроде алгоритма опроса от Марка. С возможностью принудительного ввода.

Обновление записи блокировки раз в минуту или две минуты не требует больших ресурсов (если у вас нет тысяч пользователей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...