2012-04-28 2 views
2

私は最初のapplication.cfcファイルを設定しようとしています。ColdFusion8のapplication.cfcで、アプリケーション変数とセッション変数はどこで定義できますか?

私はそうのような「イベント・ベース」で変数を起動しようとした:

<cffunction name="onApplicationStart" returnType="boolean" output="false"> 
    <cfparam name="Application.RootDir" default="/"> 
    <cfreturn true> 
</cffunction> 

<cffunction name="onSessionStart" returnType="boolean" output="false"> 
    <cfparam name="Session.activeSession" default="Yes"> 
    <cfparam name="Session.activeLogin" default="No"> 
    <cfreturn true> 
</cffunction> 

私はこれがうまく働くだろうと思ったが、私はのように、前にすべてのものを宣言する必要があるので、それは、ない、判明しますそう:

<cfparam name="Application.RootDir" default=""> 
<cfparam name="Session.activeSession" default=""> 
<cfparam name="Session.activeLogin" default=""> 

私の質問
私は変数を宣言するためのCF-イベントを使うべき理由 。とにかくイベントの外で宣言する必要がある場合は、私は自分自身でコード行を保存し、&はinital値を割り当てると宣言できますか?私はそれを間違っているのか、宣言しないようにするだけの出来事ですか?

ありがとう!

答えて

3

「前」(「すべて前に宣言」)とはどういう意味ですか?何の前に? onApplicationStart()ハンドラは、アプリケーションの起動時に最初に実行されるハンドラであり、onSessionStart()ハンドラは、セッションの開始時に最初に実行されるハンドラです。したがって、確立されているアプリケーションとセッションのコンテキストでは、「前」がありません。私はあなたにもっとコードを示す必要があると思います:例えば、 "働かない"ことを示すコードです。

これは、Application.cfcの擬似コンストラクタセクションを表示しないため、存在する場合、どのような問題があるのか​​を特定することは不可能です。しかし、セッションが動作するにはセッション管理を有効にする必要があります。また、アプリケーションやセッション変数が固まる前にアプリケーションに名前を付ける必要があります(無名アプリケーションでも動作するかもしれませんが)あなたのアプリに名前をつける)。

最後に、変数が設定されているかどうかには関係ありませんが、<cfparam>ではなく、変数を設定するときは<cfset>を使用する必要があります。どちらも同じ効果がありますが、前者はジョブの正しいツールです。

+1

アプリケーション変数は名前を設定せずに動作しますが、セッション変数には 'SessionManagement'が有効になっている必要があります。もちろん、アプリケーションが互いに干渉しないように、一意の名前を設定する必要があります。 –

+0

ああ、もう1つの可能性は、アプリケーションとセッションが既に開始された後にon〜Startメソッドが追加/変更されたため、app/sessionが既に実行されているためにメソッドが起動していないことです。 –

+0

名前のないアプリで問題が発生しました。私はすべての名前のないアプリは、名前がすべて同じとみなされるので、同じアプリケーション/セッションスコープを共有すると考えています。とにかく、CFがアプリケーション名をパスに基づいた一意の値にデフォルトで設定するだけではなく、なぜか慣習であるとはわかりません。 –

関連する問題