Jump to content

Как запретить одновременную работу нескольких пользователей под одним логином?


dbf_usr

Recommended Posts

Как запретить одновременную работу нескольких пользователей под одним логином? 

Можно ли это реализовать настройками? Кто как это реализовывал. прошу поделиться опытом.

Link to comment
Share on other sites

Есть такие мысли, но пока не знаю, как это правильно реализовать.

Т.к. могут быть подводные камни.

Например, Пользователь П1 работает в приложении, потом связь обрывается и П1 снова пытается войти через минуту и входит. Теперь вопрос: что делать? Запретить вход? Или удалить его предыдущую сессию?

Link to comment
Share on other sites

Еще вопрос. Если пользователь работает в разных вкладках браузера, как это будет воспросниматься приложением?

Link to comment
Share on other sites

On 8/1/2021 at 1:55 PM, dbf_usr said:

Как запретить одновременную работу нескольких пользователей под одним логином? 

Можно ли это реализовать настройками? Кто как это реализовывал. прошу поделиться опытом.

Вытесняющий метод. При новых входах предыдущие сессии разлогиниваются, событие таймер или ws

Link to comment
Share on other sites

On 8/1/2021 at 4:55 PM, dbf_usr said:

Как запретить одновременную работу нескольких пользователей под одним логином? 

Можно ли это реализовать настройками? Кто как это реализовывал. прошу поделиться опытом.

если будете использовать HyperServer, то все будет напрасно, но это в случае если бегать по SessionManager. Можно в БД создать таблицу с текущими сессиямии там разруливать

Link to comment
Share on other sites

On 8/9/2021 at 11:23 AM, x11 said:

ну и?

что в итоге получилось?

Делаю через таблицу в БД. Есть только проблемы с удалением записи сеанса при его разрыве. Не всегда генерируется событие обрыва сеанса и запись остается в БД.

Link to comment
Share on other sites

Sessions

 

Another important difference from classical model is that in classical model your application is able to access all available session objects while in HyperServer each Node can only access sessions which are created by that specific Node. Needless to say that each Node holds a set of sessions which are isolated from other Nodes. If you need to query all of the sessions then you need to use different methods such as saving session information in a database table. You can simply create a row in the table when session is created and remove it when session is freed.

Link to comment
Share on other sites

On 8/10/2021 at 8:27 PM, dbf_usr said:

Делаю через таблицу в БД. Есть только проблемы с удалением записи сеанса при его разрыве. Не всегда генерируется событие обрыва сеанса и запись остается в БД.

печально

 

Link to comment
Share on other sites

6 hours ago, =GGG= said:

печально

 

Сейчас работает так:

После проверки учетных данных но перед логином проверяем в таблице сеансов нет ли там записи с указанным логином

если нету - добавляем запись в таблицу с ID сеанса и именем пользователей (уникальность логинов обеспечивается) и запускаем главную форму

если есть:

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

вариант2 - находим по логину в таблице ID работающего сеанса и разрываем его, удаляем запись старого сеанса в таблице, а нового пользователя логиним

В главной форме на событие Дестрой ставим удаление записи из таблицы по ID текущего сеанса.

В МаинМодуле ставим процедуру удаление записи из таблицы по ID текущего сеанса сразу на два события : разрыв по таймауту и на закрытие браузера.

Событие Дестрой в МаинМодуле - НЕ работает!

Вот процедура уничтожения найденого сеанса (найдена на этом форуме, где - не помню):

sesid - это ID сеанса из таблицы

var SS: TUniGUISession;

SS := UniServerModule.GetSession(sesid);  
       if Assigned(SS) then
        try
          SS.TerminateAfterSecs(1);
        finally
          SS.UnBusy;
        end;

 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...