You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:52:46