首页 > 解决方案 > 尝试在 ColdFusion / ColdBox 应用程序之间共享会话时重命名应用程序时出错

问题描述

我希望在驻留在不同子域(同一服务器)上的一些应用程序之间共享会话数据。过去,我会确保每个应用程序在其各自的 application.cfc 中具有相同的名称。这已经有一段时间了——人们在一个应用程序上登录;会话与其他人共享。

现在我们希望将这些应用程序之一转换为 ColdBox。所以我在我的开发机器上设置了在 ACF 2016 上运行的 ColdBox 4。更改默认的 Coldbox 应用程序名称

this.name = hash( getCurrentTemplatePath() ); 

this.name = 'mysite;'

在开发机器上工作正常,没有问题。但是,只要我将相同的代码上传到生产环境(也是 ACF 2016),我就会收到以下错误:

Element CBBOOTSTRAP is undefined in a Java object of type class [Ljava.lang.String;. 

The error occurred in application.cfc: line 50

48 :    public boolean function onRequestStart( string targetPage ){
49 :        // Process ColdBox Request
50 :        application.cbBootstrap.onRequestStart( arguments.targetPage );
51 : 
52 :        return true;

只要我将应用程序名称改回

this.name = hash( getCurrentTemplatePath() ); 

该应用程序运行良好,没有错误(但会话未共享)。我认为关于第 50 行的信息可能是一条红鲱鱼。我在那里尝试了各种修改,但除了将应用程序名称更改回原来的名称外,没有任何改变原始错误消息。

我在 CF 管理员中未选中组件缓存并重新启动(多次)无济于事。我对 ColdBox 的了解还不够,无法猜测可能会发生什么,但我完全被难住了。我不知道为什么它可以在一台机器上的 ACF 2016 上工作,但不能在另一台机器上工作。如果有人有任何线索,我将不胜感激!非常感谢!

标签: coldfusioncoldbox

解决方案


Element CBBOOTSTRAP is undefined.

您在本地开发人员中没有看到此问题的原因是您总是首先启动 CB 应用程序,因此CBBOOTSTRAP在启动非 CB 应用程序之前在应用程序范围内进行定义。在您的其他环境中,非 CB 应用程序首先启动,因此该值尚未定义。

停止那个,做这个

几年前我遇到了同样的问题,试图让 CB 和非 CB 应用程序一起玩得很好。IIRC,我们必须在两者之间创建共享应用程序变量的包含,并将 CFM 包含到两个应用程序中,以便在更新任何一组变量时我们只需要编辑一个文件。

一旦您采用这种方法,尝试共享会话可能会奏效。如果没有,我们最终还在 CB 和非 CB 应用程序之间创建了 SSO 登录,因此我们可以在两者之间登录。


推荐阅读