2011-11-08 20 views
3

例では、index.cfmの表示を希望していますhello どうすればいいですか?Application.cfcでセッション変数を設定し、それをアプリケーションページから取得することは可能ですか?

Application.cfcの

<cfcomponent> 
    <cfset this.sessionManagement = true /> 

    <cffunction name="onSessionStart"> 
     <cfset SESSION.myVar = "hello"> 
    </cffunction> 

</cfcomponent> 

index.cfmに

<html> 
    <head> 

    <title>Testing</title> 

    </head> 

    <body> 
     <cfoutput>#SESSION.myVar#</cfoutput> 
    </body> 
</html> 

私が発見したことしかし私はすべて、それが動作index.cfmにに

<cfinvoke component="Application" method="onSessionStart"> 

を追加するときページがリフレッシュされるたびに変数がオーバーライドされます。

答えて

10

、例えば:

<cfset this.name = "foo"> 

Application.cfc疑似コンストラクターで。それ以外の場合、CFはアプリケーションを作成できないため、セッションをアプリケーションに関連付けることはできません。

+0

それが解決策でした。 – John

+0

duh。私はそれを逃したとは信じられません。 +1 –

1

はい、変数をonSessionStartで設定し、アプリケーションで使用できます。 onSessionStart関数は、新しいセッションが作成されたときにのみ起動します。したがって、リクエストごとに呼び出される場合、セッションは永続しません(CFID/CFTOKEN、JSESSIONID)は後続のリクエストに渡されません。おそらくクッキーが無効になっているためです。

+0

私は少し異なる理由により、すべてのリクエストでonSessionStartが呼び出されていました。私のapplication.cfcはColdBoxから拡張されましたが、私はブートストラップされた別のColdBoxインスタンスも実行していました(コピー/ペーストエラー)。したがって、セッション情報が返されても、ときどき起こることがあります。 – jinglesthula

3

私はあなたがColdFusionまたは少なくともApplication.cfcに慣れていると仮定していますが、onSessionStartはアプリケーションでセッション変数を開始する基本的な方法です。もちろん、彼らは削除/設定することができ、それを出力する前にセッションスコープ内の変数が存在するかどうかを確認するために良いpraticeかもしれませんので、/、他のページにリセットします。

<cfif StructKeyExists(SESSION, "myVar")> 
    <cfoutput>#SESSION.myVar#</cfoutput> 
</cfif> 

変数がない場合にはセッションタイムアウト設定(ColdFusion Administrator)を確認しましたか?あなたは、サーバー上のすべてのアプリケーションのデフォルトを設定する、そこにそれを設定することもできますし、右のApplication.cfcでそれを設定することができます:あなたは、あなたのアプリケーションの名前を与える必要が

THIS.SessionTimeout = CreateTimeSpan(0, 1, 0, 0); // One hour Session Timeout 
+0

+1は、変数がすべてのページで定義されているかどうかをチェックします。 – John

関連する問題