2011-06-27 7 views
0

リモートでCFCを呼び出すと、ColdFusionでセッション変数が認識されないのはなぜですか?セッション変数とリモートCFCコール

例:の非常に最初の行に

http://www.mywebsite.com/CFC/myfunc.cfc?method=dosomething;arg1=foo;arg2=foo2 

私は次のように置く場合...

<cfdump var="#session#" abort> 

...:

私は、私が使用して呼び出すCFCを持っていますmyfunc.cfc、すべてのセッション変数のcfdumpが正しく表示されています。しかし、私が次のような単純なことをすれば、

<cfset myvar = session.datasrc> 

私は500エラーが発生します。要素DATASRCはSESSIONで定義されていません。

session.datasrcがcfdumpに表示され、リモートで(<cfinvoke>のように)アクセスしないと問題なく動作します。私はいくつかの不動産、またはCFIDEの設定が不足していますか?どこかでCFCのセッション変数にアクセスするためのリモート呼び出しが許可されていません。ありがとう。

+0

を議論したように「手動」セッションIDに渡す必要があります、いくつか読んだ後、私はこれはによって保護されると考えていることを記載すべきカプセル化。すべての後に、どのセッションがcfc呼び出しのリモート呼び出しでなければなりませんか?しかし、まだ、私は困惑しています。 –

答えて

3

"リモート" cfcへの呼び出しは、ブラウザから呼び出された場合にセッションを維持します。

<cffunction access="remote" returntype="any" output="No" hint="this hint" name="test"> 
    <cfargument required="false" name="username" type="string" default=""/> 

    <cfset session.username="#arguments.username#"> 
    <cfreturn session> 

</cffunction> 

cf3をhttp://localhost:8500/CFCs/your.cfc?method=testと呼び出すと、セッションIDは一定のままになります。それをhttp://localhost:8500/CFCs/your.cfc?method=test&username=bobと呼び、セッション変数を設定し、URLから引き数を取り除くと、セッション変数が保持されます。あなたは、ブラウザを使用せずに、リモートCFCを呼び出す場合

、あなたはさらにhere

3

cfcへのリモート呼び出しにはセッションがありません。それは常にワンショットの取引です。

上記のようにURLを介してcfcにアクセスすると、ページとしてアクセスするようなセッションになるため、セッションが開始されます。 Webサーバーは、セッションクッキーなどのすべての要素をサーバーに渡し、セッションスコープをcfcが利用できるようにします。

リモートでcfcにアクセスすると、要求された方法のためにコンポーネントに利用できなくなります。

サービスメソッドの内部で一時的なスコープ変数に依存しないでください。どちらかをcoldspringのようなものを使って注入して、 "設定"サービスに依存するか、引数として値を渡してください。

あなたと鈍っているため、セッションスコープはデータソース名を格納するのに適切な場所ではありません。 ColdFusion 9を使用している場合、Application.cfcのアプリケーション全体のデータソース設定を調べることになります

+0

最も矛盾するのは、私がセッション構造体をcfdumpすることができ、session.datasrcが定義済みの変数であることです。 –

1

セッションは、異なるユーザーに異なるデータソースを持たない限り、データソースのような変数の適切なスコープではありません。アプリケーションスコープは、アプリケーション全体の変数の適切な場所です。最初にアプリケーションスコープを使用してみて、まだ問題があるかどうかを確認します。また、変数名の綴りをチェックし、CFINVOKE呼び出し(必要に応じて関数をpublicに設定)を使ってアプリケーション内からその関数をローカルにヒットさせて、ローカルで正常に動作するかどうかを調べます。それからそれはおそらくあなたが遠隔でそれを呼んでいる方法で何かを知っています。

+0

スペルが正しいです。私はそれをローカルでも呼ぶことができます。スティーブン・モレッティ(Stephen Moretti)は、CFCコールはワンショットの取引だと述べているのと同じです。私はこれについて一日中読んできた。すべての記事とフォーラムは1つの事実を指しています:cfcへのリモートコールは "セッション"を持ちません。 –

関連する問題