powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как зафиксировать время работы пользователя внутри сессии
25 сообщений из 35, страница 1 из 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
25 сообщений из 35, страница 1 из 2
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как зафиксировать время работы пользователя внутри сессии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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