使用Websockets并调用WSPublish时,我在Coldfusion(2016 UPDATE 5)中遇到了应用程序/会话范围的奇怪行为。
以下代码说明了这种异常现象:
<cfdump var="#application.Security.GetSession()#" label="1A application.Security.GetSession()">
<cfdump var="#session#" label="1B session">
<cfset wsPublish("notifications", "Test") />
<cfdump var="#application.Security.GetSession()#" label="2A application.Security.GetSession()">
<cfdump var="#session#" label="2B session">
在1A和1B中,会话按照指示返回。
然后我运行WSPublish()函数。
在2A中,会话是空的,但在2B中它仍然像以前一样。
因此,在运行WSPublish()之后,当我尝试通过调用另一个CFC来检索它(2A)来访问会话时,它不存在。但是,直接访问会话时确实存在会话(2B)。
所有application.Security.GetSession()方法都是这样的:
<cfcomponent output="no">
<cffunction name="GetSession" returntype="any">
<cfif NOT IsDefined("session")>
<cfreturn StructNew() />
<cfelse>
<cfreturn session />
</cfif>
</cffunction>
</cfcomponent>
如果我删除了WSPublish()调用,则1A,1B,2A,2B都会返回正确的会话数据。
为什么WSPublish()会导致此异常,我该如何解决?
谢谢!