Oracle APEX接收非APEX页面AJAX请求获取Cookie报错如何解决?
问题原因
你遇到的ORA-06502错误核心是两个问题:
- 未判断目标Cookie是否存在,当请求没有携带
LOGIN_USERNAME_COOKIE时,c.vals是空数组,直接访问下标1就会触发数值/值错误 - ORDS REST处理程序默认没有绑定APEX会话上下文,且AJAX请求默认未配置携带凭证,导致服务端无法读取请求携带的Cookie
你之前在SQL命令窗口执行正常,是因为SQL窗口的执行上下文已经继承了当前登录的APEX会话的Cookie信息,所以能正常读取到值。
修复步骤
1. 优化PL/SQL函数,增加异常和空值判断
避免Cookie不存在时的数组越界错误:
create or replace function test return varchar2 is c owa_cookie.cookie; begin c := owa_cookie.get('LOGIN_USERNAME_COOKIE'); -- 先判断Cookie值的数量是否大于0 if c.num_vals >= 1 then return c.vals(1); else return 'COOKIE_NOT_FOUND'; end if; exception when others then return 'ERROR: ' || sqlerrm; end; /
2. 修改AJAX请求配置,强制携带Cookie
同域名下的请求也需要显式配置withCredentials,保证浏览器把Cookie带到REST端点:
$.ajax({ url: "<你的REST处理程序地址>", xhrFields: { withCredentials: true }, crossDomain: false })
3. 配置REST服务的上下文权限
如果需要读取APEX会话相关的Cookie,需要在REST处理程序的源代码前增加APEX上下文初始化逻辑:
declare l_workspace_id number; begin -- 替换为你的APEX工作区名称 select workspace_id into l_workspace_id from apex_workspaces where workspace = 'YOUR_WORKSPACE_NAME'; apex_util.set_security_group_id(l_workspace_id); end; /
同时确认你的REST模块的安全策略没有限制Cookie读取,暂时可以设置为「不检查特权」验证功能是否正常。
内容的提问来源于stack exchange,提问作者nick zoum
相关产品推荐
相关产品推荐

