2010-02-02 2 views
0

В нашей системе один клиент может иметь несколько операторов. Однако есть «желание» от клиента. У одной компании есть учетная запись, однако для этой компании могут быть задействованы операторы mulitple. Клиент хочет, чтобы мы подготовили решение, которое только один оператор из компании может войти в систему в одно и то же время. Как я могу это достичь?Разрешить логин только одному пользователю в момент времени

+0

Как вы проверяете подлинность? Является ли это распространенным env.? –

+0

да .. для целей аутентификации задействован db. –

ответ

0

«Я с помощью приложения WPF и сервер написан в WCF, однако это может быть достигнуто. Но что в ситуации, когда пользователь открыл приложение и был неактивным в течение 30 минут? »

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

+0

встречный поток? это довольно бесполезно и ** плохой дизайн ** .... логика тайм-аута должна быть частью логики сервера, а НЕ как поток - но как строка структуры данных/таблицы, которая проверяется на запросах, которые необходимо защитить ... Если это был erlang, и вы создали счетчик потока .... это может быть хорошо. –

+0

Я пропустил вашу точку ... «но как структуру данных/таблицу, проверенную на запросах, которые необходимо защитить» ... уверен, это очевидно, иначе не было бы никакой утилиты при написании значения для db, указывающий, что пользователь отключился. Но, на ваш взгляд, что было бы хорошим способом проверки времени ожидания пользователя? Я не мог думать иначе, по крайней мере до сих пор. –

+0

Прочтите статью в своем ответе - она ​​будет посвящена различным аспектам распределенной аутентификации. –

1

Вы можете использовать поле базы данных, чтобы отметить, что они вошли в систему. Обновите поле до «вошедшего в систему», когда они это сделают, а затем обновите его до «вышли из системы» при выходе из системы.

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

+0

yes..i хотел сделать так, но как я могу контролировать сеансы входа в систему? –

2

Просто убедитесь, что система имеет возможность проверить логин по каждому запросу. Либо

  1. в активном (путем запроса состояния - возможно, базу данных для сравнения некоторые секреты) или
  2. Пассивно - используя некоторую форму криптографии и токенов (возможно, в куки).

Вариант один самый простой, вариант 2 является самым быстрым. Если вы проверяете по каждому запросу, вы можете убедиться, что только один пользователь остается в системе - если другой пользователь подписывается, вы можете аннулировать существующий активный логин - возможно, с периодом перезарядки n минут.

Вы должны разработать некоторую форму схемы авторизации - Керберос является схемой де-факто - читать это легко следовать учебник по Керберосу Designing an Authentication System: a Dialogue in Four Scenes Это должно показать вам, что вы на самом деле нужно сделать.

1

Лучший подход, который я использовал:

  1. Создайте таблицу, используемую для отслеживания, является ли оператор вошел в (например, идентификатор пользователя и last_accessed_dt)
  2. На каждом запросе страницы с помощью обновления оператора последний просил дата/время
  3. Когда оператор пытается войти в систему, он может сделать это только в том случае, если последний запрос времени/времени> периода ожидания сеансов на вашем веб-сайте (например, 30 минут) или если это идентификатор пользователя последнего оператора ... это способ, который они могут быстро восстановить после выхода из системы и т.д.
  4. Whe п оператор выходит из иметь последнюю Достигано очистило
  5. Когда время сеанса из-есть последний Достигано очистил
+0

Я использую приложение WPF, и сервер написан на WCF, однако это может быть достигнуто ,Но что в ситуации, когда пользователь открыл приложение и не работал в течение 30 минут? –

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