当使用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">
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
如果我删除WSPublish()调用,则1A,1B,2A,2B都返回正确的会话数据.
为什么WSPublish()会导致此异常,如何解决?
谢谢!