powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как зафиксировать время работы пользователя внутри сессии
35 сообщений из 35, показаны все 2 страниц
Как зафиксировать время работы пользователя внутри сессии
    #38808601
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Один из заказчиков хочет, чтобы фиксировалось время входа и выхода из системы на apex 4.2.

Дату и время входа смотрим по WWV_FLOW_SESSIONS$. В данной таблице не фиксируется дата выхода/конца сессии. Там только есть поле LAST_CHANGED, которое почему-то равно дате старта сессии.

Дату выхода на logout мы повесить не можем, так как 90% юзеров просто закрывают окно браузера.
Поэтому вопрос: как-нибудь можно определить дату и время конца сессии - если нажали на логаут то дату нажатия, если сессия закрылась по бездействию, то дата окончания периода бездействия?
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38808941
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,
повесить таймер на JS. На событие мыши обнулять.
Пусть пользователи поругаются на любопытного начальника).
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38808978
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

нагрузка мне кажется большая будет, если аяксом каждое событие (например click) передавать на апдейт БД... может есть другие средства?))
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38809024
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,

1) Создается/используете имеющуюся таблицу юзеров - имя / дата активности.
2) На нулевой странице создаете pl/sql регион. В нем обновляете дату активности у юзера.

Минусы: если страница сделана полностью на аяксах (что маловероятно), то регион отработает только при первой загрузке страницы.

Или все же раз в 5/10/15 минут таки слать аякс на тот же апдейт.

Еще где-то мелькало вариант. База сама ломится на клиент и проверяет.

Сделано через node.js и чего-то там еще, в общем сложное решение.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38809035
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,
А ты как хотел?
Потому что, то что хочет заказчик дорого и решается на десктоп или Java.
Слежка за своими клиентами.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38809037
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В java есть событие конца сессии.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38809047
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл. У Apex ведь есть листнер с java. Значит, решаемо.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810482
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Забыл. У Apex ведь есть листнер с java. Значит, решаемо.
А если листенера нет? :) OHS установлен.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810499
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,
что такое OHS ?)
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810501
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
electrodblkangel,
что такое OHS ?)
OHS - Oracle HTTP Server, проще говоря Apache заточенный ораклом под себя.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810504
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

если двигаться в сторону фиксирования сессий в листнере, с чего хотя бы начать?
исходников у него нет, как java спалит, что сессия началась и под каким она номером?
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810527
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gustlyelectrod,

2) На нулевой странице создаете pl/sql регион. В нем обновляете дату активности у юзера.

Минусы: если страница сделана полностью на аяксах (что маловероятно), то регион отработает только при первой загрузке страницы.

Или все же раз в 5/10/15 минут таки слать аякс на тот же апдейт.

Еще где-то мелькало вариант. База сама ломится на клиент и проверяет.

Сделано через node.js и чего-то там еще, в общем сложное решение.
А разве в апексе это не сделано? Апекс следит за последним действием пользователя.

electrod, Administration/Monitor activity Не пойдет?
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810529
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,

не нашел служебные таблицы, в которых это ведется...
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810585
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
public class ServletSessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("\nсессия создана " + se.getSession().getId());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("\nсессия закрыта" + se.getSession().getId());
    }


у меня перед APEX GlassFish (томкат) - перед запросами стоит и может всё контролировать
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810622
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
electrodblkangel,

не нашел служебные таблицы, в которых это ведется...
я подглядел в приложение 4350, используется таблица или представление WWV_FLOW_ACTIVITY_LOG, но обратится к ней не смог.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38810685
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,

Спасибо! Работает - из system-a получилось - select * from APEX_040200.WWV_FLOW_ACTIVITY_LOG
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38819985
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,
Не найду, где там метка конца сессии или выхода из приложения?
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38819992
electrod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

мы смотрим по максимальной дате последнего действия

еще можно определить что сессия кончилась по тому, что ее нет в таблице APEX_040200.WWV_FLOW_SESSIONS$, но там как то подозрительно много сессий есть (возможно там хранятся просто все сессии за день, не только активные)
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821276
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,
оба варианта не катят, если пользователь работал по AJAX.
- не перегружал страницу, работал целый день и вышел крестиком на окне.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821289
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,

1) Как говорил Petro123 повесить обработчик на клик мышкой, но не отсылать данные сразу а накапливать в датасторедже самого браузера, отсылать с некоей периодичностью.
2) На событие закрытия окна повесить обработчик, который на пару секунд будет задерживать выход из браузера и отсылать не отосланные данные по кликам.

Если окно с задержкой будет не навязчивым, врядли это сподвигнет пользователя обрубать процесс.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821293
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть более лаконичное решение - повесить ajax-запрос с обновленеи записи окончания сессии на событие onunload для тега body.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821321
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik,

Если убить процесс браузера, не поможет. Через закрытие браузера, а не вкладки возможно тоже. Хотя 2-е надо пробовать.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821339
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GustlyЕсли убить процесс браузера, не поможет.
Я бы не заморачивался.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821367
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CasufiGustlyЕсли убить процесс браузера, не поможет.
Я бы не заморачивался.
+1 против лома нет приёма.
Если событие JS работает на крест, то это достаточно.
Встроенных в APEX среств нет.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821546
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,

Можно job-ом опрашивать состояние apex_workspace_sessions, писать в какую-нибудь свою табличку
А по поводу закрытия браузера, есть Maximum Session Length in Seconds / Maximum Session Idle Time in Seconds
которые так же доступны в apex dictionary
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821622
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevсостояние apex_workspace_sessions
глянул. Она пишет только вход в web tool develop'era.
Если зашли в продакшен-приложение там пусто
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821645
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
electrod,

Или еще лучше не джобом, а в начале каждой сессии, первое - проверить наличие "себя" в своей таблице сессий, если нету - перенести из apex_workspace_sessions запись, второе - проверить все незакрытые сессии в своей табличке, вычислить время окончания по apex_workspace_activity_log / Maximum Session Length in Seconds / Maximum Session Idle Time - так логичнее, имхо.
чтобы формулу вывести тут нужно поэкспериментировать (там есть всякие поля elapsed и др.)

Ну и по кнопке выход сессии "закрывать" запись в таблице соответственно.
Будете делать, формулу вычисления времени окончания сессии напишите, вдруг кому пригодится

Petro123,

Стандартно, если нужен доступ ко всем workspace, не только текущий - см. роль APEX_ADMINISTRATOR_ROLE
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821659
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Я имел ввиду, в первом варианте, что пусто - как раз и есть признак, что сессия закрыта, погрешность - не больше интервала job-a, а вот в последнем варианте всё уже вычисляется без всяких интервалов
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821687
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDev,
у меня так:
Код: sql
1.
select t.* from apex_workspace_sessions t where t.workspace_name = 'aaaaaaa' order by t.session_created desc

- нет ничего при входе и выходе в приложение простым юзверем
Код: sql
1.
select t.created_on, t.on_new_instance_fired_for, t.* from apex_040100.WWV_FLOW_SESSIONS$ t order by t.created_on desc;

- нет ничего при выходе на крестик
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821739
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123SvDev,
у меня так:
Код: sql
1.
select t.* from apex_workspace_sessions t where t.workspace_name = 'aaaaaaa' order by t.session_created desc

- нет ничего при входе

Уже написал про APEX_ADMINISTRATOR_ROLE, чтобы смотреть другие workspace, её нужно назначить схеме, которая назначена как parsing schema в приложении

Petro123 и выходе в приложение простым юзверем
Код: sql
1.
select t.created_on, t.on_new_instance_fired_for, t.* from apex_040100.WWV_FLOW_SESSIONS$ t order by t.created_on desc;

- нет ничего при выходе на крестик
Обратного я нигде и не предполагал
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821749
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

и да, workspace_name, обычно в верхнем регистре хранится
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38821827
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDev,
1. Тогда я тебя не понял. Я смотрю свой ворк со всеми правами в PL Developer.
А захожу для теста и логгинга из осла в 2-х вариантах, из под IDE APEX и не из под IDE.
В первом случае событие и запись туда идёт.
2. Конечно большие. Это я заменил.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38822519
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как Вам такой вариант.
1. Все сессии, длительность которых более n-минут (для примера 5 минут) считаются не активными.
2. На нулевой странице повесить ajax который говорит будет сообщать серверу, что данная сессия открыта в браузере, тем самым даже если закроют через процессы, сессия будет считаться завершенной.
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38822538
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,
не пойдёт, т.к. юз-кейс или ВИ (варианты использования) такой: Открыл утром страницу 15 и целый день работает с ней.
1. Что будет когда сессия протухнет в ВИ выще?
2. AJAX на какое событие? Опять таймер?
...
Рейтинг: 0 / 0
Как зафиксировать время работы пользователя внутри сессии
    #38822703
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. А почему сессия протухнет то, если он работает целый день в этой странице, он нее смотрит что ли только? Да даже если смотрит, с точки зрения AJAXa на нулевой странице, не протухнет. С точки зрения Апекса, может протухнуть и его выкинет на страницу логона и пользователь перезайдет в приложение.
2. Да таймер, именно на тот интервал n-минут, за который сессия считается неактивной.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как зафиксировать время работы пользователя внутри сессии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]