Oracle Apex按用户类型登录跳转出现重定向错误如何解决
问题根因
你将分支配置在第1页的Before Header阶段,且admin/zoneadmin类型用户的跳转目标仍然是第1页,每次第1页加载时都会触发分支逻辑,再次重定向到第1页,形成无限重定向循环,该问题和Cookie无关。
解决方案
方案1:给当前分支增加服务端执行条件
仅当需要跳转至其他页面时才触发分支,修改分支的「Server Side Condition」为以下表达式:
:SESSION_USER_TYPE = 'rider'
同时简化分支的PL/SQL代码,去掉admin用户的跳转逻辑,因为admin本来就留在第1页,不需要额外跳转:
declare myurl varchar2(255); begin myurl := 'f?p=&APP_ID.:24:&SESSION.::::P24_ID:&SESSION_USER_ID.'; return myurl; end;
方案2:优化跳转逻辑,避免同页跳转
保留原有多用户类型跳转逻辑的前提下,增加当前页判断,只有目标页和当前页不一致时才返回跳转URL,否则返回NULL(返回NULL时Apex不会执行重定向):
declare target_page number := 1; myurl varchar2(255); begin if :SESSION_USER_TYPE in ('admin', 'zoneadmin') then target_page := 1; elsif :SESSION_USER_TYPE in ('rider') then target_page := 24; end if; -- 仅当目标页不等于当前页时生成跳转URL if target_page != :APP_PAGE_ID then myurl := APEX_PAGE.GET_URL( p_page => target_page, p_items => 'P'||target_page||'_ID', p_values => :SESSION_USER_ID ); return myurl; else -- 同页不跳转 return null; end if; end;
这里用原生函数
APEX_PAGE.GET_URL代替硬编码的f?p格式URL,兼容性更好,也避免拼写错误。
方案3:将跳转逻辑移至登录页,仅登录后触发一次
如果你只需要在登录成功后跳转一次,不需要每次访问首页都判断跳转,直接把分支配置在登录页(默认是第9999页)的「After Login」处理阶段,这样只有登录成功时执行一次跳转,不会出现循环问题。
内容的提问来源于stack exchange,提问作者Ahmed Haroon
相关产品推荐
相关产品推荐

