【发布时间】:2019-04-03 11:42:46
【问题描述】:
我们已将 ColdFusion 应用程序从 ColdFusion 10 迁移到 ColdFusion 2016。迁移后,应用程序变量不在其范围内,而是在每次请求时都会刷新。
考虑以下示例,
Application.cfm
<cfsetting enablecfoutputonly="true" />
<CFAPPLICATION NAME="Test App"
SETCLIENTCOOKIES="YES"
CLIENTMANAGEMENT="YES"
SESSIONMANAGEMENT="YES"
SESSIONTIMEOUT="#CREATETIMESPAN(0,8,0,0)#"
APPLICATIONTIMEOUT="#CREATETIMESPAN(1,0,0,0)#">
<cfdump var="#Application#" label="app">
<CFLOCK SCOPE="APPLICATION" TYPE="EXCLUSIVE" TIMEOUT="10">
<CFSET Application.Email = "test@test.com">
<CFSET Application.DataSource="test">
</cflock>
Test.cfm
<CFLOCK SCOPE="APPLICATION" TYPE="READONLY" TIMEOUT="10">
<cfset Application.one = 1>
<cfset Application.two = 2>
<cfset Application.three = 3>
</cflock>
OnRequestEnd.cfm
<cfsetting showdebugoutput="false" />
<cfdump var="#Application#" label="onRequestEnd">
不确定为什么 Application 范围的变量会失去持久性。
以下是预期的输出..
知道为什么应用程序变量会丢失并在每次请求时刷新吗?
【问题讨论】:
-
@Rajesh,Application.cfm 页面中的
<cfdump var="#Application#" label="app">只是在Test.cfm页面运行之前运行。一旦该页面运行,则应用程序变量已设置。所以页面的下一个请求/刷新会显示它们。由于您使用的是较新版本的 ColdFusion,因此您应该停止使用 Application.cfm 并切换到 Application.cfc。它使您可以更好地控制处理生命周期。 -
@Miguel-F 在下一个请求中,输出也是相同的,这就是我来 SO :)。 Application.cfc,我们可以使用,但应用程序在迁移后来到我这里:)
-
除此之外 - 您的第二个应用程序锁是只读的,但我认为这不会影响问题。
-
@Kannan.P 是的,我同意除了本地环境很可能与服务器环境不完全匹配(否则它们的行为方式相同)。跨度>
-
...和相同的操作系统,相同的操作系统版本,相同的操作系统补丁,相同的java版本,等等等等等等
标签: coldfusion coldfusion-2016 application.cfm