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

如何在Apex中避免会话无效时出现success message checksum content error

可行解决方案

方案1:自定义错误处理器中直接重定向(你原本的思路完全可用)

Apex的自定义错误处理逻辑支持返回重定向响应,操作步骤如下:

  • 进入应用的「共享组件」-「错误处理」配置页,创建/修改自定义错误处理函数
  • 在函数中判断错误码是否为apex.success_msg.checksum_content_error
  • 匹配后执行重定向逻辑:获取当前请求的URL,剥离success_msg及相关校验参数,使用apex_util.redirect_url方法跳转到清理后的URL
  • 记得设置错误处理函数的返回状态为跳过默认错误提示

示例代码片段参考:

FUNCTION apex_error_handler (p_error IN apex_error.t_error) 
RETURN apex_error.t_error_result 
IS
    l_result apex_error.t_error_result;
    l_clean_url VARCHAR2(4000);
BEGIN
    l_result := apex_error.init_error_result(p_error => p_error);
    IF p_error.error_code = 'apex.success_msg.checksum_content_error' THEN
        -- 剥离URL中的success_msg参数及对应的校验签名参数
        l_clean_url := apex_util.prepare_url(
            p_url => regexp_replace(owa_util.get_cgi_env('QUERY_STRING'), '&?success_msg=[^&]*(&success_msg_cs=[^&]*)?', ''),
            p_checksum_type => 'SESSION'
        );
        apex_util.redirect_url(p_url => l_clean_url);
        -- 终止后续错误处理逻辑
        apex_application.stop_apex_engine;
    END IF;
    RETURN l_result;
END apex_error_handler;

方案2:从根源避免success_msg参数被用户书签留存

不要通过URL携带一次性成功提示,改用会话级别的临时变量存储提示信息,完全规避问题:

  • 页面2保存成功后,不要在跳转URL中加success_msg参数,而是用apex_util.set_session_state把提示内容存到一个仅当前会话有效的页面项/应用项里,比如P1_SUCCESS_MSG
  • 跳转回页面1后,页面1加载时判断P1_SUCCESS_MSG是否有值,有值就展示成功提示,展示后立刻调用apex_util.set_session_state('P1_SUCCESS_MSG', null)清空值
  • 这种方式下URL不会携带任何一次性参数,用户收藏的就是纯净的页面1地址,不会触发后续校验错误

方案3:配置页面参数白名单过滤

进入页面1的属性配置,找到「可接受的参数」设置,仅加入你需要的业务参数,把success_msg、success_msg_cs这类一次性提示参数排除在白名单外,Apex会自动忽略不在白名单内的URL参数,也不会触发后续的校验逻辑。

内容的提问来源于stack exchange,提问作者eaolson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:36:03