Можете ли вы иметь несколько cfapplications в application.cfm? - PullRequest
1 голос
/ 06 февраля 2012

У меня есть сайт 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 ]

3 голосов
/ 06 февраля 2012

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

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

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

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

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

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

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

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

1 голос
/ 06 февраля 2012

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

0 голосов
/ 07 февраля 2012

Используйте подход Шона Корфилда для создания 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.

...