Search code examples
web-servicescoldfusioncoldfusion-9

Session Variables and Remote CFC Calls


Why does ColdFusion not recognize my session variable when I remotely call a CFC?

Example:

I have a CFC that I call using:

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

If I put the following...

<cfdump var="#session#" abort>

...on the very first line of myfunc.cfc, I see a properly displayed cfdump of all of my session variables. However, if I do something simple like:

<cfset myvar = session.datasrc>

I get a 500 error. Element DATASRC is undefined in SESSION.

session.datasrc appears in the cfdump and if I don't access it remotely (like with a <cfinvoke>) it works fine. Am I missing a some property, or a setting in CFIDE? Something somewhere isn't allowing for remote calls to CFC's to access session variables. Thanks.


Solution

  • Calls to a "remote" cfc do maintain session if called through a browser.

    <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>
    

    Call the cfc with http://localhost:8500/CFCs/your.cfc?method=test and you will see the session id will remain constant. Call it as http://localhost:8500/CFCs/your.cfc?method=test&username=bob and you will set the session variable, strip off the argument from the url and the session variable is persisted.

    If you are calling the remote cfc without using a browser, you will need to "manually" pass in the sessionid as discussed here