|
|
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Всем привет! Один из заказчиков хочет, чтобы фиксировалось время входа и выхода из системы на apex 4.2. Дату и время входа смотрим по WWV_FLOW_SESSIONS$. В данной таблице не фиксируется дата выхода/конца сессии. Там только есть поле LAST_CHANGED, которое почему-то равно дате старта сессии. Дату выхода на logout мы повесить не можем, так как 90% юзеров просто закрывают окно браузера. Поэтому вопрос: как-нибудь можно определить дату и время конца сессии - если нажали на логаут то дату нажатия, если сессия закрылась по бездействию, то дата окончания периода бездействия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2014, 17:20 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, повесить таймер на JS. На событие мыши обнулять. Пусть пользователи поругаются на любопытного начальника). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 00:01 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Petro123, нагрузка мне кажется большая будет, если аяксом каждое событие (например click) передавать на апдейт БД... может есть другие средства?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 01:41 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, 1) Создается/используете имеющуюся таблицу юзеров - имя / дата активности. 2) На нулевой странице создаете pl/sql регион. В нем обновляете дату активности у юзера. Минусы: если страница сделана полностью на аяксах (что маловероятно), то регион отработает только при первой загрузке страницы. Или все же раз в 5/10/15 минут таки слать аякс на тот же апдейт. Еще где-то мелькало вариант. База сама ломится на клиент и проверяет. Сделано через node.js и чего-то там еще, в общем сложное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 07:31 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, А ты как хотел? Потому что, то что хочет заказчик дорого и решается на десктоп или Java. Слежка за своими клиентами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 08:02 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
В java есть событие конца сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 08:06 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Забыл. У Apex ведь есть листнер с java. Значит, решаемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 08:30 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Petro123Забыл. У Apex ведь есть листнер с java. Значит, решаемо. А если листенера нет? :) OHS установлен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 11:22 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
blkangel, что такое OHS ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 11:32 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrodblkangel, что такое OHS ?) OHS - Oracle HTTP Server, проще говоря Apache заточенный ораклом под себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 11:34 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Petro123, если двигаться в сторону фиксирования сессий в листнере, с чего хотя бы начать? исходников у него нет, как java спалит, что сессия началась и под каким она номером? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 11:36 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Gustlyelectrod, 2) На нулевой странице создаете pl/sql регион. В нем обновляете дату активности у юзера. Минусы: если страница сделана полностью на аяксах (что маловероятно), то регион отработает только при первой загрузке страницы. Или все же раз в 5/10/15 минут таки слать аякс на тот же апдейт. Еще где-то мелькало вариант. База сама ломится на клиент и проверяет. Сделано через node.js и чего-то там еще, в общем сложное решение. А разве в апексе это не сделано? Апекс следит за последним действием пользователя. electrod, Administration/Monitor activity Не пойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 11:46 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
blkangel, не нашел служебные таблицы, в которых это ведется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 11:47 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrodкак java спалит, что сессия началась и под каким она номером? https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionListener.html Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. у меня перед APEX GlassFish (томкат) - перед запросами стоит и может всё контролировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 12:15 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrodblkangel, не нашел служебные таблицы, в которых это ведется... я подглядел в приложение 4350, используется таблица или представление WWV_FLOW_ACTIVITY_LOG, но обратится к ней не смог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 12:34 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
blkangel, Спасибо! Работает - из system-a получилось - select * from APEX_040200.WWV_FLOW_ACTIVITY_LOG ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2014, 13:14 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, Не найду, где там метка конца сессии или выхода из приложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 19:52 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Petro123, мы смотрим по максимальной дате последнего действия еще можно определить что сессия кончилась по тому, что ее нет в таблице APEX_040200.WWV_FLOW_SESSIONS$, но там как то подозрительно много сессий есть (возможно там хранятся просто все сессии за день, не только активные) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 20:12 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, оба варианта не катят, если пользователь работал по AJAX. - не перегружал страницу, работал целый день и вышел крестиком на окне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 12:29 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, 1) Как говорил Petro123 повесить обработчик на клик мышкой, но не отсылать данные сразу а накапливать в датасторедже самого браузера, отсылать с некоей периодичностью. 2) На событие закрытия окна повесить обработчик, который на пару секунд будет задерживать выход из браузера и отсылать не отосланные данные по кликам. Если окно с задержкой будет не навязчивым, врядли это сподвигнет пользователя обрубать процесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 12:44 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Есть более лаконичное решение - повесить ajax-запрос с обновленеи записи окончания сессии на событие onunload для тега body. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 12:52 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
kasik, Если убить процесс браузера, не поможет. Через закрытие браузера, а не вкладки возможно тоже. Хотя 2-е надо пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 13:18 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
GustlyЕсли убить процесс браузера, не поможет. Я бы не заморачивался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 13:30 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
CasufiGustlyЕсли убить процесс браузера, не поможет. Я бы не заморачивался. +1 против лома нет приёма. Если событие JS работает на крест, то это достаточно. Встроенных в APEX среств нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 14:05 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, Можно job-ом опрашивать состояние apex_workspace_sessions, писать в какую-нибудь свою табличку А по поводу закрытия браузера, есть Maximum Session Length in Seconds / Maximum Session Idle Time in Seconds которые так же доступны в apex dictionary ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 16:22 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
SvDevсостояние apex_workspace_sessions глянул. Она пишет только вход в web tool develop'era. Если зашли в продакшен-приложение там пусто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 17:02 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
electrod, Или еще лучше не джобом, а в начале каждой сессии, первое - проверить наличие "себя" в своей таблице сессий, если нету - перенести из apex_workspace_sessions запись, второе - проверить все незакрытые сессии в своей табличке, вычислить время окончания по apex_workspace_activity_log / Maximum Session Length in Seconds / Maximum Session Idle Time - так логичнее, имхо. чтобы формулу вывести тут нужно поэкспериментировать (там есть всякие поля elapsed и др.) Ну и по кнопке выход сессии "закрывать" запись в таблице соответственно. Будете делать, формулу вычисления времени окончания сессии напишите, вдруг кому пригодится Petro123, Стандартно, если нужен доступ ко всем workspace, не только текущий - см. роль APEX_ADMINISTRATOR_ROLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 17:12 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Petro123, Я имел ввиду, в первом варианте, что пусто - как раз и есть признак, что сессия закрыта, погрешность - не больше интервала job-a, а вот в последнем варианте всё уже вычисляется без всяких интервалов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 17:20 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
SvDev, у меня так: Код: sql 1. - нет ничего при входе и выходе в приложение простым юзверем Код: sql 1. - нет ничего при выходе на крестик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 17:38 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Petro123SvDev, у меня так: Код: sql 1. - нет ничего при входе Уже написал про APEX_ADMINISTRATOR_ROLE, чтобы смотреть другие workspace, её нужно назначить схеме, которая назначена как parsing schema в приложении Petro123 и выходе в приложение простым юзверем Код: sql 1. - нет ничего при выходе на крестик Обратного я нигде и не предполагал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 18:02 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Petro123, и да, workspace_name, обычно в верхнем регистре хранится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 18:06 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
SvDev, 1. Тогда я тебя не понял. Я смотрю свой ворк со всеми правами в PL Developer. А захожу для теста и логгинга из осла в 2-х вариантах, из под IDE APEX и не из под IDE. В первом случае событие и запись туда идёт. 2. Конечно большие. Это я заменил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 19:24 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
Как Вам такой вариант. 1. Все сессии, длительность которых более n-минут (для примера 5 минут) считаются не активными. 2. На нулевой странице повесить ajax который говорит будет сообщать серверу, что данная сессия открыта в браузере, тем самым даже если закроют через процессы, сессия будет считаться завершенной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 13:20 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
blkangel, не пойдёт, т.к. юз-кейс или ВИ (варианты использования) такой: Открыл утром страницу 15 и целый день работает с ней. 1. Что будет когда сессия протухнет в ВИ выще? 2. AJAX на какое событие? Опять таймер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 13:34 |
|
||
|
Как зафиксировать время работы пользователя внутри сессии
|
|||
|---|---|---|---|
|
#18+
1. А почему сессия протухнет то, если он работает целый день в этой странице, он нее смотрит что ли только? Да даже если смотрит, с точки зрения AJAXa на нулевой странице, не протухнет. С точки зрения Апекса, может протухнуть и его выкинет на страницу логона и пользователь перезайдет в приложение. 2. Да таймер, именно на тот интервал n-минут, за который сессия считается неактивной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 15:36 |
|
||
|
|

start [/forum/topic.php?all=1&fid=50&tid=1875168]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
229ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 583ms |

| 0 / 0 |
