Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Apex and session


Автор: BIV 2.7.2015, 13:56
Всем доброе время суток!
Есть 2 сайта. 1й на php, 2й собран при помощи apex. На 1м сайте пользователь авторизовывается через базу данных Oracle. Мне нужно получить для apex номер сессии этого пользоаателя, чтобы вставить его в адресную строку браузера и переместить пользователя на нужную страницу в apex. Как мне получить номер сессии пользователя? База данных для сайта на php и apex oracle,  и она одна для всех

Автор: BIV 3.7.2015, 21:34
Странно, неужели это никому не интересно... Наверняка же кто-то пытался совместить свой сайт с апексом.

Вот мои наработки и движение в этом направлении. Код написан на PL/SQL:

Код

create or replace function UDO_F_get_session_apex
(
  username in varchar2,
  password in varchar2,
  page in integer
) return number is
  vc_arr OWA.vc_arr;
  session_id number;
  usern apex_workspace_sessions.user_name%TYPE;
begin
  
-- Защита от пустого ввода
  IF username = '' THEN
     return 0;
  end if; 

  vc_arr(1) := 'TEST';
  OWA.init_cgi_env(vc_arr);
  
  wwv_flow_api.set_security_group_id(wwv_flow_application_install.get_workspace_id());
  
  session_id := apex_custom_auth.get_next_session_id();
  
  apex_custom_auth.login(
      p_uname => username,
      p_password => password,
      p_session_id => session_id,
      p_app_page => page,
      p_entry_point => null,
      p_preserve_case => null
      );
      
   apex_custom_auth.set_session_id(session_id);
   apex_custom_auth.set_user(username);
   apex_application.g_flow_id := page;
   
   select t.user_name into usern from apex_workspace_sessions t
   where t.apex_session_id = session_id;
   
   IF UPPER(usern) = UPPER(username) THEN
     return session_id;
   ELSE
     return 0;
   end if;
/*
  create or replace public synonym UDO_F_get_session_apex for UDO_F_get_session_apex;
  grant execute on UDO_F_get_session_apex to public;
  */
end UDO_F_get_session_apex;


Пытаюсь написать функцию, в которой проходит авторизация пользователя и возвращает номер сессии. В принципе, функция рабочая, она возвращает номер сессии, проверяет наличие пользователя и его пароль, но есть сложности:
   Почему-то вставив номер сессии в f?p=104:1:&SESSION. (вставляю на место &SESSION.), открывается окно авторизации. Если я, находясь на странице  f?p=104:1: , вставляю полученную сессию, например f?p=104:2:1642607679570158, то попадаю на страницу авторизации f?p=104:101. Если я нажму на кнопку в браузере "назад", потом "вперед", то получаю f?p=104:101:1642607679570158. Как бы сессия прописалась, но я на странице авторизации...
Что делать? Куда смотреть? Как?

Автор: Akina 4.7.2015, 14:21
C чего ты решил, что сессия  это только номер? А адрес и порт клиента? состояние соединения? и хренова гора других мелочей? Нифига у тебя не получится...

Автор: BIV 4.7.2015, 14:35
1) Тут не только номер. apex_custom_auth.login() как раз, вроде, и приписывает номер сессии к конкретному пользователю.
2) Зачем адрес и порт клиента??? Есть адрес самого сайта, скажем http://адрес:8080/apex/f?p=104:101. Вы же при создании сайта не учитываете адреса всех клиентов и их порты?))
3) И какие же эти хренова гора мелочей?

Если вы никогда не работали с APEX, прошу проходить мимо и не писать тут лишнюю болтовню. Все возможно, надо только добраться до нужной инфы

Автор: Addidas 24.7.2015, 23:11
Так мало получить номер сессии, там куки же прописываются всяк разные.
Можно запилить Custom Auth Scheme и в ней логику авторизации описать.
Стандартная Auth Scheme - не проканает - как мне видитцо.

Какая версия APEX ??

Автор: BIV 27.8.2015, 15:36
Вот было бы интересно узнать что именно он прописывает или какую функцию использует. APEX 4.2.

Автор: Addidas 6.9.2015, 19:43
Я не понимаю в чём у вас проблема.
Запилите свои Authentication Schemes и Authorization Schemes.
Примеры есть даже там при создании собственной схемы - нажмите на Label полей - там даже code samples присутствуют.
Сделайте свою схемы авторизации и аутентификации да сделайте их активными.
Будет вам счастье.
Вы пробовали или не хотите пробовать и гуглить, а хотите сразу запилиную дверь? smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)