Можете ли вы иметь несколько cfapplications в application.cfm?

У меня есть сайт Coldfusion с приложением.cfm. В нем определено приложение 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 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>

Мой вопрос, можете ли вы определить два отдельных cfapplication в основном application.cfm?

3 ответа

Решение

Я не совсем уверен, почему вы хотите или нуждаетесь во втором приложении; это не совсем понятно из вашего кода или объяснения. Я думаю, что вы могли бы поставить еще один, но это, вероятно, отменит предыдущий.

Кроме того, в вашем коде все, что вы делаете, - это пишете в область приложения... это на самом деле не объявляет другое cfapplication.

Однако пара советов... ваша большая область cfif для значений сеанса, просто используйте cfparam:

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

Таким образом, если он еще не существует, он будет создан.

Кроме того, если вы используете последнюю версию ColdFusion, вам не нужно обходить сессионные области. Вы должны ограничиться настройками области приложения, но так как вы устанавливаете их в Application.cfm, это довольно глупо... Я бы использовал другую область, такую ​​как область запроса.

На вашем cfif cgi.script_name вам не нужно # знаков вокруг этой переменной. Единственный раз, когда они вам нужны, это когда они заключаются в кавычки или выводятся в cfoutput (или когда используется с Evaluate() для создания динамических переменных).

Надеюсь, это поможет.

Ну, вы можете сделать это, технически. В результате области приложения, клиента и сеанса, связанные с первым вызовом тега, будут доступны только до вызова второго тега. На этом этапе все последующие ссылки на эти области будут ссылаться на контекст, определенный последним тегом. Однако, это не так много случаев, когда это хорошая идея.

Используйте подход Шона Корфилда для создания Application.cfc в подпапке, которая расширяет ваш корневой Application.cfc.

/questions/48038223/rasshirenie-applicationcfc-v-podkataloge/48038268#48038268

Ваш корневой Application.cfc будет содержать все основные переменные приложения и сеанса, необходимые. Application.cfc вашего подкаталога будет содержать все переменные приложения и сеанса для вашего приложения "QSvalues". Однако эти переменные будут находиться в application.qsValues ​​и session.qsValues.

application.qsValues.number, а не application.number. session.qsValues.prop_st, а не session.prop_st.

Делая это, вы можете иметь столько "подпрограмм", сколько захотите, но все они будут существовать в одном APPLICATION.NAME.

Другие вопросы по тегам