ColdFusion 11:"变量SESSION未定义"错误

Joe*_*ose 3 apache coldfusion session

问题

我刚刚在我的计算机上安装了ColdFusion 11 Developer Edition,以使我的LocalHost环境与我们最近升级的开发和生产环境相匹配.

但是现在,在其他地方工作的相同代码在新安装上失败 - 具体来说:

  • 以前的ColdFusion 9 LocalHost(我试图用新安装替换):代码有效.
  • ColdFusion 11开发和生产环境:代码有效.
  • 新ColdFusion 11 LocalHost:代码失败,出现"Variable SESSION is undefined"错误.

试图解决方案没有用

尝试在我们的开发和生产服务器中完成的任务

当我们的服务器管理员在12月从ColdFusion 9升级到11时也会发生此错误,所以我联系他以了解他是如何解决的.但是,一个重要的区别是他使用Apache Web服务器安装在Linux机器上,而我使用ColdFusion 11 Developer Edition的内置Web服务器安装在Windows 7计算机上.

无论如何,他告诉我他已经做了两处修改来解决他的系统上的这个错误:

  1. 在ColdFusion Administrator中,确保已启用所有内存变量.
    **我这样做了,检查以下内容,然后点击提交更改:
    • 使用J2EE会话变量
    • 启用应用程序变量(已经选中)
    • 启用会话变量(已经选中)**
  2. 在Apache global.conf文件中,添加以下行:
    RewriteEngine on
    RewriteRule .* - [E=REMOTE_USER:%{REMOTE_USER}]
    RewriteRule .* - [E=SCRIPT_NAME:%{REQUEST_URI}]
    RewriteRule .* - [E=AUTHENTICATE_CN:%{ENV:AUTHENTICATE_CN}]
    RewriteRule .* - [E=AUTHENTICATE_DEPARTMENTNUMBER:%{ENV:AUTHENTICATE_DEPARTMENTNUMBER}]
    RewriteRule .* - [E=AUTHENTICATE_GIVENNAME:%{ENV:AUTHENTICATE_GIVENNAME}]
    RewriteRule .* - [E=AUTHENTICATE_MAILALTERNATEADDRESS:%{ENV:AUTHENTICATE_MAILALTERNATEADDRESS}]
    RewriteRule .* - [E=AUTHENTICATE_MAIL:%{ENV:AUTHENTICATE_MAIL}]
    RewriteRule .* - [E=AUTHENTICATE_ORGANIZATIONALSTATUS:%{ENV:AUTHENTICATE_ORGANIZATIONALSTATUS}]
    RewriteRule .* - [E=AUTHENTICATE_SERIALNUMBER:%{ENV:AUTHENTICATE_SERIALNUMBER}]
    RewriteRule .* - [E=AUTHENTICATE_SN:%{ENV:AUTHENTICATE_SN}]
    RewriteRule .* - [E=AUTHENTICATE_TELEPHONENUMBER:%{ENV:AUTHENTICATE_TELEPHONENUMBER}]
    RewriteRule .* - [E=AUTHENTICATE_UID:%{ENV:AUTHENTICATE_UID}]
    我不认为这与我有关,因为我正在使用内置Web服务器进行此开发安装,并且global.conf在我的安装中没有看到任何文件.

网页搜索:添加设置 Application.cfc

网络搜索效率不高,但确实让我得到了ColdFusion 8的旧指令.基于那篇文章,我尝试将以下行添加到我的Application.cfc文件中 - 但这并没有解决错误:

<cfset this.sessionManagement = "Yes" >
<cfset this.name = "ApplicationName" >
Run Code Online (Sandbox Code Playgroud)

Stack Overflow上的类似答案

我在Stack Overflow上搜索了类似的问题,但没有找到任何有希望的线索.我在这里找到了一个类似的问题,但是这个人似乎遇到了与我遇到的问题不同的问题:在他的情况下,SESSION变量存在(因为他可以证明<cfdump>,但后来在代码中被忽略.但在我的情况下SESSION变量似乎并没有首先创建.

确实尝试了其中一条建议,但是:将以下内容添加到onSessionStart(): SESSION.User = CreateObject("component", "cfc.User");

不幸的是,这并没有解决问题.

怀疑

我怀疑问题的关键是我使用内置服务器,并且我必须在配置文件中添加行,就像我们的服务器管理员使用Apache global.conf文件一样.

我需要做些什么来让我的代码在这个本地ColdFusion 11安装上运行?

更新:决议

最终,问题的原因是配置问题(由有缺陷的程序设计加剧):

OnApplicationStart()函数中,有一个对数据库的调用,该调用失败,因为我忽略了JAR在这个新安装上安装相应的文件.这将程序执行发送到该OnError()函数.在我们的例子中,OnError()函数SESSION在其报告中包含来自变量的一些信息- 但由于程序执行从未完成OnApplicationStart()函数,因此它从未进入创建变量的OnSessionStart()函数SESSION.这导致"变量SESSION未定义"错误.

我赞成Kris的回答并将其标记为正确.(为新用户做得很好,Kris!)

小智 6

通过确定安装与代码是否存在问题,继续进行故障排除.我会尝试使用CF服务器配置工具在Apache中创建一个新站点,然后在CFB中创建一个新项目.创建Application.cfc文件和index.cfm.在Application.cfc中,请确保您拥有this.sessionManagement = truethis.clientManagement = true.在index.cfm中只是cfdump会话.如果此操作成功,您可以进一步查看现有代码.如果失败,您可能想尝试重新安装CF.