首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话变量和远程CFC调用

会话变量和远程CFC调用
EN

Stack Overflow用户
提问于 2011-06-28 02:04:20
回答 3查看 3.5K关注 0票数 0

当我远程调用CFC时,为什么ColdFusion不能识别我的会话变量?

示例:

我有一个我称之为CFC的,使用:

代码语言:javascript
复制
http://www.mywebsite.com/CFC/myfunc.cfc?method=dosomething;arg1=foo;arg2=foo2

如果我把下面的.

代码语言:javascript
复制
<cfdump var="#session#" abort>

在myfunc.cfc的第一行,我看到了所有会话变量的正确显示的cfdump。但是,如果我做一些简单的事情,比如:

代码语言:javascript
复制
<cfset myvar = session.datasrc>

我得到一个500错误。会话中未定义元素DATASRC。

session.datasrc出现在cfdump中,如果我不远程访问它(比如使用<cfinvoke>),它就能正常工作。我是否遗漏了CFIDE中的某个属性或设置?某些地方不允许远程调用CFC来访问会话变量。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-28 07:45:57

如果通过浏览器调用,则对“远程”cfc的调用将维护会话。

代码语言:javascript
复制
<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>

使用http://localhost:8500/CFCs/your.cfc?method=test调用cfc,您将看到会话id将保持不变。将其调用为http://localhost:8500/CFCs/your.cfc?method=test&username=bob,您将设置会话变量,从url中剥离参数,会话变量将持久化。

如果您在不使用浏览器的情况下调用远程cfc,则需要按照讨论的here“手动”传入会话If。

票数 3
EN

Stack Overflow用户

发布于 2011-06-28 03:17:21

对cfc的远程调用没有任何会话意义。这永远是一次机会。

如果你像上面那样通过url访问cfc,你会得到session,因为它就像是一个页面。web服务器将通过所有元素(例如会话cookie)传递到服务器,从而使会话范围对cfc可用。

如果您远程访问cfc,由于请求的方式,所有这些都不能用于组件。

您永远不应该在服务方法中依赖临时作用域变量。要么使用像coldspring这样的东西注入它们,以提供对“配置”服务的依赖关系,要么将值作为参数传递。

坦率地说,会话作用域绝对不是存储数据源名称的正确位置。鉴于您使用的是ColdFusion 9,您可能有兴趣查看Application.cfc下的应用程序范围的数据源设置

票数 3
EN

Stack Overflow用户

发布于 2011-06-28 03:17:41

会话不是像数据源这样的变量的适当作用域,除非您对不同的用户有不同的数据源。应用程序范围是应用程序范围内变量的适当位置。我会首先尝试使用应用程序作用域,看看您是否仍然有问题。还要检查变量名拼写之类的东西,并尝试通过CFINVOKE调用(如果需要,将函数设置为public )从应用程序中本地访问该函数,以查看它在本地是否正常工作。那么你就知道这可能与你远程调用的方式有关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6496992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档