dbf_usr Posted August 1, 2021 Share Posted August 1, 2021 Как запретить одновременную работу нескольких пользователей под одним логином? Можно ли это реализовать настройками? Кто как это реализовывал. прошу поделиться опытом. Quote Link to comment Share on other sites More sharing options...
x11 Posted August 2, 2021 Share Posted August 2, 2021 Есть такие мысли, но пока не знаю, как это правильно реализовать. Т.к. могут быть подводные камни. Например, Пользователь П1 работает в приложении, потом связь обрывается и П1 снова пытается войти через минуту и входит. Теперь вопрос: что делать? Запретить вход? Или удалить его предыдущую сессию? Quote Link to comment Share on other sites More sharing options...
x11 Posted August 2, 2021 Share Posted August 2, 2021 Еще вопрос. Если пользователь работает в разных вкладках браузера, как это будет воспросниматься приложением? Quote Link to comment Share on other sites More sharing options...
stas Posted August 2, 2021 Share Posted August 2, 2021 On 8/1/2021 at 1:55 PM, dbf_usr said: Как запретить одновременную работу нескольких пользователей под одним логином? Можно ли это реализовать настройками? Кто как это реализовывал. прошу поделиться опытом. Вытесняющий метод. При новых входах предыдущие сессии разлогиниваются, событие таймер или ws Quote Link to comment Share on other sites More sharing options...
MSMK Posted August 3, 2021 Share Posted August 3, 2021 On 8/1/2021 at 4:55 PM, dbf_usr said: Как запретить одновременную работу нескольких пользователей под одним логином? Можно ли это реализовать настройками? Кто как это реализовывал. прошу поделиться опытом. если будете использовать HyperServer, то все будет напрасно, но это в случае если бегать по SessionManager. Можно в БД создать таблицу с текущими сессиямии там разруливать Quote Link to comment Share on other sites More sharing options...
x11 Posted August 9, 2021 Share Posted August 9, 2021 ну и? что в итоге получилось? Quote Link to comment Share on other sites More sharing options...
dbf_usr Posted August 10, 2021 Author Share Posted August 10, 2021 On 8/9/2021 at 11:23 AM, x11 said: ну и? что в итоге получилось? Делаю через таблицу в БД. Есть только проблемы с удалением записи сеанса при его разрыве. Не всегда генерируется событие обрыва сеанса и запись остается в БД. Quote Link to comment Share on other sites More sharing options...
MSMK Posted August 12, 2021 Share Posted August 12, 2021 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. Quote Link to comment Share on other sites More sharing options...
MSMK Posted August 12, 2021 Share Posted August 12, 2021 On 8/10/2021 at 8:27 PM, dbf_usr said: Делаю через таблицу в БД. Есть только проблемы с удалением записи сеанса при его разрыве. Не всегда генерируется событие обрыва сеанса и запись остается в БД. печально Quote Link to comment Share on other sites More sharing options...
dbf_usr Posted August 12, 2021 Author Share Posted August 12, 2021 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; Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.