我有一个带有application.cfm的coldfusion站点。它有一个cfapplication定义:
<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 :(得分:3)
我不完全确定你为什么想要或需要第二个cfapplication;你的代码或解释并不是很清楚。我想你可能会在那里放另一个,但它可能会覆盖前一个。
此外,在您的代码中,您所做的只是写入应用程序范围......这并不是真正声明另一个cfapplication。
虽然有几个提示......你的会话值的大cfif区域,只需使用cfparam:
<cfparam name="session.prop_st" default="">
如果它尚不存在,那么它将被创建。
此外,如果您使用的是最新的ColdFusion,则无需围绕会话范围进行cflock。你应该锁定应用程序范围设置,但是因为你在Application.cfm中设置它们,它有点傻......我会使用另一个范围,比如请求范围。
在您的cfif cgi.script_name上,您不需要围绕该变量的#符号。您需要它们的唯一时间是它们被引用或以cfoutput输出(或与Evaluate()一起使用以创建动态变量时)。
我希望这会有所帮助。
答案 1 :(得分:1)
嗯,从技术上讲,你可以做到这一点。结果是与第一个标记调用关联的应用程序,客户端和会话范围仅在第二个标记调用之前可用。此时,对这些范围的所有后续引用都将引用后一个标记定义的上下文。然而,这并不是太多的情况,这样做是个好主意。
答案 2 :(得分:0)
使用Sean Corfield的方法在扩展根Application.cfc的子文件夹中创建Application.cfc。
https://stackoverflow.com/a/307441/11047
您的根Application.cfc将包含所需的所有主要应用程序和会话变量。您的子目录的Application.cfc将包含“QSvalues”应用程序的所有应用程序和会话变量。但是,这些变量将位于application.qsValues和session.qsValues。
中application.qsValues.number,而不是application.number。 session.qsValues.prop_st,而不是session.prop_st。
这样做,您可以拥有任意数量的“子应用程序”,但它们都存在于单个APPLICATION.NAME中。