2010-06-25 27 views

cevap

21

Application.cfc'yi kullanıyorsanız, URL'de belirli bir şey iletildiyse veya benzer bir şekilde bir çağrıyı onApplicationStart() öğesine zorlayabilmeniz için güncelleştirebilirsiniz. Sadece onRequestStart() 'daki sihirli jetonu kontrol edin ve eğer buysa onApplicationStart() öğesini çağırın.

Eğer değilseniz, @ Marcos'un önerisini deneyebilirsiniz. Başvurunuzda ne gibi olumsuzluklar olabileceğinden emin değilim. Öneririm aslında uygulamanızı yeniden adlandırıyor, bu yüzden yeni bir uygulama olarak başlıyor.

0

Genelde uygulamada neler olup bittiğini izlemek için her kullanıcının oturumuna Uygulama kapsamımdaki bir yapıya bir başvuruda bulunuyorum. Sunucu kapsamında benzer bir şey yapmak belki burada yardımcı olabilir. Deneyin:

< CFSET server.runningApplications [ "myApp"] = Uygulama/>

Sonra bu uygulamanın kapsamı dışında fiili uygulama nesnesine bir başvuru olurdu. Ondan kurtulmak için her türlü yıkıcı şeyi deneyebilirsiniz. Bunu kendi sorumluluğunuzda deneyin! Ve üretim kutunuzda yapmadan önce dev sunucusu üzerinde yapın. ; Eğer CF9 üzerinde iseniz)

19
+6

Bu tek 'doğru' çözümdür (ve CF9'da olmanız gerekir). Diğer her şey, olası iplik güvenliği sorunlarıyla ilgili şüpheli bir çözümdür. –

3
<cfset structClear(application) /> 
+0

cevabı nerede? – Henry

+0

Yapılan öneri görünür. : - \ Önizlemeyi kullan. Ayrıca, bu öneri zaten verildi.Kabul ediyorsanız, öneriyi oylamanıza oy verin. Tekrar göndermeyin. –

0

kullanın cfinvoke çalıştırın.

<cfinvoke method="onApplicationEnd" component="Application"> 
    <cfinvokeargument name="ApplicationScope" value="#application#" /> 
</cfinvoke> 
+2

OnApplicationEnd() öğesini çalıştırmanın bir uygulamanın yeniden başlatılmasına neden olacak şekilde yararlı olacağını sanmıyorum. CF8/CFMX7'de, onApplicationStart() öğesini çağırmak istediğiniz davranışa en yakın olanı arar - ancak iş parçacığı için güvenli olmayacağından emin olun: CF otomatik olarak tek bir iş parçacığı onApplicationStart() için aramaları BAŞKA BT'Yİ ÇAĞIRIYOR, ancak siz yapabilirsiniz. Bunu söylediğinde yap. CF9'da, applicationStop() bunu yapmak için doğru yoldur. –

3

uygulamanızı biten bir az invaziv bir yol geçici olarak çok kısa bir şeye ApplicationTimeout ayarlamaktır: Henry tarafından belirtildiği gibi

<cffunction name="ApplicationStop" returntype="boolean" output="false"> 
<cfif IsDefined('application')> 
    <cftry> 
    <!--- This is just in case there's no app scope but variables.application ---> 
    <cfset CreateObject('java', 'coldfusion.runtime.ApplicationScopeTracker').cleanUp(application) /> 
    <cfreturn true /> 
    <cfcatch type="any"></cfcatch> 
    </cftry> 
</cfif> 
<cfreturn false /> 
</cffunction> 

, o konuda benim blog yazısı bu. İşte

bir değişiklik yaparak ve daha sonra tekrar kontrol için kısa bol olan uygulama 10 saniye içinde zaman aşımı ayarlanmış bir application.cfc dosyasından bir örnek:

<cfcomponent displayname="Application"> 
    <cfscript> 
     this.name = "myAppName"; 
     this.setclientcookies="yes"; 
     this.sessionmanagement="yes"; 
     this.sessiontimeout= CreateTimeSpan(0,0,60,0); 
     this.applicationTimeout= CreateTimeSpan(0,0,0,10); 
    </cfscript> 
    ... 
</cfcomponent> 

Sen sınırlamak gerekebilir oturumu da. Uygulama ve Oturum zaman aşımlarına derinlemesine bakmak için this article by Ben Nadel'a bakın. Eğer application.cfc kullanıyorsanız

2

, senin onRequestStart fonksiyonunun üstündeki bu sopa:

<!--- RESET APP? ---> 
<cfif isdefined("url.reinit")> 
    <cfset OnApplicationStart()> 
    <cfset OnSessionStart()> 
</cfif> 

Sonra herhangi cfm bir URL Var geçebilir ve uygulama sıfırlayacak.

İlgili konular