Oracle APEX 22.2.0:提交后SSC调用owa_cookie.get报错,移至Before Header正常求因
问题描述
用户使用Oracle APEX 22.2.0版本,需求为用户成功登录时在设备上设置Cookie,下次登录若Cookie存在则绕过MFA页面。
为实现该需求,用户为登录流程和跳转至首页的分支设置了**服务器端条件(SSC)**的PL/SQL函数体:
DECLARE l_cookie owa_cookie.cookie; v_cookie_value varchar2(50); v_count number; v_result boolean; BEGIN l_cookie := owa_cookie.get('LGN_C'); v_cookie_value := l_cookie.vals(1); --:P9999_COOKIE_TARGET := l_cookie.vals(1); select count(*) into v_count from sandro.portal_logins where upper(username) = upper(:P9999_USERNAME) and mfastatus = 0; IF v_cookie_value IS NOT NULL THEN v_result := true; ELSIF v_count = 1 THEN v_result := true; else v_result := false; END IF; return v_result; END;
当函数返回true时,页面执行登录流程并跳转至首页,但每次登录都会触发“找不到数据”错误,排查确认错误来自l_cookie := owa_cookie.get('LGN_C');语句,尽管截图显示Cookie存在且有值。
2023年6月27日更新:将owa_cookie.get函数移至Before Header流程,并将值存入页面项后,功能可正常工作,此时能在SSC中使用该页面项判断分支/流程执行。用户希望了解为何提交后的服务器端条件中无法获取Cookie。
原因分析
- APEX请求生命周期阶段差异:提交后的服务器端条件处于请求处理的提交处理阶段,这个阶段中,APEX优先处理表单提交参数,Cookie的解析和上下文初始化要等到页面渲染早期阶段(如Before Header)才完成。提交阶段的上下文环境未完成Cookie访问机制的初始化,直接调用
owa_cookie.get会出现找不到数据的错误。 owa_cookie依赖的上下文限制:owa_cookie.get依赖Oracle Web Agent(OWA)的完整上下文,提交处理阶段核心是处理表单数据,并未加载OWA的Cookie上下文,导致无法读取Cookie。而Before Header阶段属于页面渲染早期,OWA上下文已完成初始化,Cookie可正常读取。- 页面项的会话上下文作用:将Cookie值存入页面项后,页面项会被纳入APEX会话上下文管理,后续提交处理阶段可直接访问会话中的页面项值,绕过了提交阶段无法直接读取Cookie的限制。
内容的提问来源于stack exchange,提问作者LogicallyFunky
相关产品推荐
相关产品推荐

