问题
我刚刚在我的电脑上安装了ColdFusion 11开发者版,使我的LocalHost环境与我们最近升级的开发和生产环境相匹配。
但是现在,在新安装中同样的代码正在失败--特别是:
不起作用的尝试解决方案
尝试在我们的开发和生产服务器中所做的工作
当我们的服务器管理员在12月执行从ColdFusion 9到11的升级时,也发生了这个错误,所以我联系他,了解他是如何解决这个问题的。但是,一个显著的区别是,他使用Apache服务器在Linux上安装,而我则使用ColdFusion 11 Developer Edition的内置web服务器在Windows7计算机上安装。
无论如何,他告诉我,为了解决系统上的错误,他做了两次更改:
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" >关于堆栈溢出的类似答案
我在Stack Overflow上搜索了类似的问题,但是没有找到任何有希望的线索。我在这里发现了一个类似的问题,但那个人似乎有一个不同于我正在经历的问题:在他的例子中,SESSION变量存在(正如他可以用<cfdump>演示的那样,但在代码中稍后会被忽略)。但在我的例子中,SESSION变量似乎一开始就没有创建。
不过,我确实尝试了其中一个建议:将以下内容添加到onSessionStart():SESSION.User = CreateObject("component", "cfc.User");
不幸的是,这并没有解决问题。
猜疑
我怀疑问题的症结在于我对内置服务器的使用,并且我必须在配置文件中添加行,就像服务器管理员对Apache global.conf文件所做的那样。
有什么想法吗?我需要做些什么来让我的代码在这个本地ColdFusion 11安装上工作?
更新:决议
最终,造成问题的原因是配置问题(由于有缺陷的程序设计而更加复杂):
在OnApplicationStart()函数中,有一个对数据库的调用,它失败了,因为我忽略了在这个新安装上安装适当的JAR文件。这将程序执行发送到OnError()函数。在我们的示例中,OnError()函数在其报告中包含了来自SESSION变量的一些信息--但是由于程序执行从未完成OnApplicationStart()函数,因此它从未进入创建SESSION变量的OnSessionStart()函数。这导致了“变量会话是未定义的”错误。
我对克里斯的回答投了反对票,并将其标记为正确。(为新用户Kris做得很好!)
发布于 2015-04-02 17:33:51
通过确定安装与代码之间是否有问题,继续进行故障排除。我将尝试在Apache中创建一个新站点,使用CF服务器配置工具,然后在CFB中创建一个新项目。创建一个Application.cfc文件和index.cfm。在Application.cfc中,确保有this.sessionManagement = true和this.clientManagement = true。在index.cfm中,只是cfdump会话。如果这导致成功,您可以进一步查看您现有的代码。如果失败,您可能想尝试重新安装CF。
发布于 2019-05-16 12:34:03
如果意外地将CFAdmin中的会话vars的超时参数设置为0,也会发生这种情况。它不会是无限的,它将使会话范围消失。
https://stackoverflow.com/questions/29418042
复制相似问题