Oracle APEX - HTML-ссылки прерывают сессию и требуют нового входа - PullRequest
1 голос
/ 21 февраля 2012

Хорошо, вот что происходит:

У меня есть клиент, для которого я создаю приложение. У моего клиента есть блок-схема, которую он хотел бы опубликовать на первой странице своего приложения. Проверьте. Затем мой клиент хочет, чтобы эта потоковая диаграмма была настроена как карта изображений, чтобы пользователь мог щелкнуть одно из полей на этой потоковой диаграмме и перейти к отчету в другой части приложения. Проверьте.

Все это элементарно и, в техническом смысле, работает. Проблема заключается в том, что с APEX я сталкивался ранее, когда каждый пользователь нажимает одну из этих ссылок, он выводит их на экран входа в систему. Кажется, что прямая ссылка на URL-адрес страницы нарушает сеанс и требует повторного входа в систему, даже если вы ссылаетесь с одной страницы приложения на другую в том же приложении.

Я поиграл со всеми настройками аутентификации в надежде исправить это и попытался точно определить, что нарушает сессию, но безуспешно.

Кто-нибудь еще имел эту проблему и мог бы поделиться своим методом ее устранения? Я действительно не могу позволить пользователям входить в систему каждый раз, когда они нажимают на ссылку, и я также не могу просто удалить аутентификацию на страницах. Заранее спасибо.

1 Ответ

2 голосов
/ 21 февраля 2012

Вы должны передать идентификатор сессии в ваших ссылках.Если вы этого не сделаете, apex увидит это как новый сеанс.Вы можете узнать по URL: запишите идентификатор сессии в вашем URL, когда вы находитесь на своей карте изображений.Когда вы выбираете приложение, еще раз посмотрите на часть идентификатора сеанса в URL.Если они отличаются, то вы каждый раз начинаете новый сеанс.

/apex/f?p=190:90:1674713700462259:::::
  • 190 -> идентификатор приложения
  • 90 -> идентификатор страницы
  • 1674713700462259 -> Идентификатор сеанса

Чтобы передать сеанс, зависит, где вы строите свои ссылки.В PLSQL вы можете найти его через :SESSION или :APP_SESSION

Например, в динамическом регионе plsql: htp.p('the session id is '||:SESSION);

В коде JavaScript вы можете использовать $v("pInstance") для извлечениязначение динамически, или используйте &APP_SESSION., которому будет подставлено значение во время выполнения.Небольшой пример:

function printsome(){
var d = $("<div></div>");
d.text('&APP_SESSION. = ' + $v("pInstance"));
$("body").append(d);
};

Так что вам, вероятно, просто нужно немного изменить структуру вашей ссылки, чтобы включить сессию!

...