Для начала подумаем, где должна использоваться возможность удаления сессии. Правильно, там где пользователь завершает сеанс в приложении - смотрим на ссылку LOGOUT_URL:
http://localhost:8888/apex/wwv_flow_custom_auth_std.logout?p_this_flow=4000&p_next_flow_page_sess=4550:8:8297564516445573
Нужное нам находится в wwv_flow_custom_auth_std.logout. Давайте глянем ещё на процесс, который выполняется при принудительном удалении сессий администратором экземпляра APEX. Заходим в Administration->Application Express Internal Administration, переходим на Manage Instance->Session State->Purge Session, by age. Это страница 66 приложения 4050. Посмотрим, что за процессы выполняются при обработке этой страницы:
set long 5000 select process_source from apex_application_page_proc where application_id = 4050 and page_id = 66; PROCESS_SOURCE -------------------------------------------------------------------------------- wwv_flow_cache.purge_oldest_sessions ( p_num_sessions_to_purge => :P66_MAX_SESSIONS, p_purge_sess_older_then_hrs => :P66_AGE * 24);
Ещё одна наводка - пакет wwv_flow_cache с множеством процедур purge_%.
Произведя ритуал Unwrap над этими пакетами, можно увидеть, что удаляется сессия APEX с идентификатором :p_id довольно просто:
delete apex_040000.wwv_flow_sessions$ where id = :p_id;
Всё, остальные изыски из этих процедур вроде подсчёта удалённых сессий, переноса их в wwv_flow_purged_sessions$ и изменения значения в печеньке на -1 нам не нужны.
Убить
А wwv_flow_purged_sessions$ кто чистит?
ОтветитьУдалитьНасколько я знаю, никто. Там просто хранится информация о запусках wwv_flow_cache.purge_oldest_sessions — время, количество убитых сессий и т.д.
УдалитьВ 4.2 от использования wwv_flow_purged_sessions$ отказались, что видно в apex/core/tab.sql:
...
Rem jstraub 12/01/2011 - Removed obsolete wwv_flow_purged_sessions$ (bug 13452726)
...