你可以在application.cfm中有多个cfapplications?

问题描述:

我有一个ColdFusion网站与application.cfm。它在它定义的cfapplication:你可以在application.cfm中有多个cfapplications?

<cfapplication name="FhaApp" clientmanagement="no" 
      sessionmanagement="yes" sessiontimeout="#createTimeSpan(0,0,360,0)#"> 

<cflock timeout="120" name="#session.sessionID#" type="exclusive"> 
<cfcookie name="CFID" value="#session.CFID#" > 
<cfcookie name="CFTOKEN" value="#session.cftoken#" > 
</cflock> 
<cfparam name="session.fromwhere" default=""> 
<cfif #cgi.SCRIPT_NAME# contains 'default-partner-'> 
    <cfif not ISDEFINED("cookie.fromwhere")> 
<cfcookie name="fromwhere" value="#right(cgi.SCRIPT_NAME,   (len(cgi.SCRIPT_NAME)-1))#" expires="30"> 
    <cfset session.fromwhere = #right(cgi.SCRIPT_NAME,(len(cgi.SCRIPT_NAME)-1))#> 
    </cfif> 
</cfif> 

<cfset datasourcename="fha47"> 

<cfparam name="application.dsn" default="fha47"> 

<cfparam name="session.loggedin" default="false"> 
<cfparam name="session.ppcid" default="101"> 
<cfparam name="session.cid" default="FHA"> 

我想补充另一个cfapplication,看起来像这样:

<cfapplication name = "QSvalues" 
sessionTimeout = "#CreateTimeSpan(0,0, 0, 60)#" 
sessionManagement = "yes"> 


<cflock scope = "Session" 
timeout = "30" type = "Exclusive"> 
<cfif NOT IsDefined("session.prop_st")> 
    <cfset session.prop_st = ""> 
</cfif> 
<cfif NOT IsDefined("session.prop_zip")> 
    <cfset session.prop_zip = ""> 
</cfif> 
<cfif NOT IsDefined("session.address")> 
    <cfset session.address = ""> 
</cfif> 
<cfif NOT IsDefined("session.email")> 
    <cfset session.email = ""> 
</cfif> 
<cfif NOT IsDefined("session.fname")> 
    <cfset session.fname = ""> 
</cfif> 
<cfif NOT IsDefined("session.lname")> 
    <cfset session.lname = ""> 
</cfif> 
<cfif NOT IsDefined("session.pri_phone_1")> 
    <cfset session.pri_phone_1 = ""> 
</cfif> 
<cfif NOT IsDefined("session.pri_phone_2")> 
    <cfset session.pri_phone_2 = ""> 
</cfif> 
<cfif NOT IsDefined("session.pri_phone_3")> 
    <cfset session.pri_phone_3 = ""> 
</cfif> 
</cflock> 

<cflock scope = "Application" timeout = "30" type = "Exclusive"> 
<cfif NOT IsDefined("application.number")> 
    <cfset application.number = 0> 
</cfif> 
</cflock> 

我的问题是,你可以在主application.cfm定义两个单独的cfapplication?

+0

不是。它可能不会导致语法错误,但最后一个会胜出。你想达到什么目的? – Leigh 2012-02-06 19:46:52

我不完全确定你为什么想要或需要第二个cfapplication;从代码或解释中不太清楚。我想你可能会在那里放置另一个,但它可能会覆盖前一个。

此外,在你的代码中,你所做的只是写入应用程序范围..这不是真的宣告另一个cfapplication。

几个秘诀虽然...对于会话值你的大面积CFIF,只需使用cfparam:

<cfparam name="session.prop_st" default=""> 

,如果它不存在这样的话,它会被创建。另外,如果您使用的是最新版本的ColdFusion,则无需在会话范围内使用cflock。你应该锁定应用范围设置,但是因为你在Application.cfm中设置它们,所以它很傻。我会使用另一个范围,比如请求范围。

在你的cfif cgi.script_name上,你不需要围绕该变量的#号。你需要它们的唯一时间是当它们被引用或正在被输出到cfoutput中时(或者当与Evaluate()一起使用来创建动态变量时)。

我希望这会有所帮助。

+1

有趣的是,这个答案被选为解决方案,但甚至没有试图解决发布的具体问题。 – 2012-02-06 20:07:54

+0

Rob,每个''标签确实会启动一个新的应用程序;两个应用程序范围都将存在,但只有当前命名的应用程序才能访问。但是,如果回到第一个应用程序,它仍然会在那里。底线,我认为这不符合OP的想法。 – 2012-02-07 17:38:32

嗯,你可以在技术上做到这一点。结果将是,与第一个标记调用关联的应用程序,客户端和会话范围将仅在第二个标记调用之前可用。此时,对这些范围的所有后续引用都会引用后一个标记定义的上下文。然而,这并不是太多的情况下,这是一个好主意。

使用Sean Corfield的方法在扩展您的根Application.cfc的子文件夹中创建Application.cfc。

https://stackoverflow.com/a/307441/11047

你的根的Application.cfc将包含所有所需的主要应用程序和会话变量。您的子目录的Application.cfc将包含您的“QSvalues”应用程序的所有应用程序和会话变量。但是,这些变量将位于application.qsValues和session.qsValues中。

application.qsValues.number,not application.number。 session.qsValues.prop_st,而不是session.prop_st。

这样做,您可以拥有任意数量的“子应用程序”,但它们都将存在于一个APPLICATION.NAME中。

+0

注意OP询问.cfm不是.cfc – 2012-02-06 20:09:16

+0

好的,那是真的。但是,这引出了问题,是否有可能将其转换为Application.cfc?如果是这样,那么答案是相关的。 – 2012-02-06 21:07:25

+0

我真的怀疑你可以在Application.cfc中有多个应用程序引用 - 'cfapplication'实际上并没有在那里使用,应用程序池是通过调用组件来建立的,并且使用'this'作用域来设置,就像这样:'this.name =“FooApp”''''cfupplication name =“FooApp”>' – 2012-02-06 21:59:20