ColdFusion 11:“变量SESSION未定义”错误

时间:2015-04-02 16:38:10

标签: apache session coldfusion

问题

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

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

  • 之前的ColdFusion 9 LocalHost(我试图用新安装替换它):代码可以正常工作。
  • ColdFusion 11开发和生产环境:代码有效。
  • 新ColdFusion 11 LocalHost:代码失败并显示“变量SESSION未定义”错误。

尝试不起作用的解决方案

尝试在我们的发展中做了什么&生产服务器

当我们的服务器管理员在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文件。
  3. 网页搜索:在Application.cfc

    中添加设置

    网络搜索效率不高,但确实引导我进入very old instruction for ColdFusion 8。根据该文章,我尝试将以下行添加到我的Application.cfc文件中 - 但这并未解决错误:

    <cfset this.sessionManagement = "Yes" >
    <cfset this.name = "ApplicationName" >
    

    Stack Overflow上的类似答案

    我在Stack Overflow上搜索了类似的问题,但没有找到任何有希望的线索。我found one similar question here,但是这个人似乎遇到了与我遇到的问题不同的问题:在他的情况下,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!)

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

如果您不小心将CFAdmin中的会话变量的超时参数设置为0,也会发生这种情况。它不是无限的,它将使会话范围消失。