Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session Coldfusion会话-CF如何准确识别连接/唯一客户端_Session_Vba_Coldfusion - Fatal编程技术网

Session Coldfusion会话-CF如何准确识别连接/唯一客户端

Session Coldfusion会话-CF如何准确识别连接/唯一客户端,session,vba,coldfusion,Session,Vba,Coldfusion,Coldfusion会话-CF如何准确识别连接/唯一客户端 在使用远程CFC进行一些挖掘之后,我从Word VBA调用了它们,发现它们也设置了会话。这让我开始思考,并在谷歌上搜索(没有成功)来解释CF如何区分不同的客户。我之前假设它是一个浏览器cookie,用于识别客户端,但现在我通过word应用程序使用web服务,仍然获得会话变量和会话ID集 因此,如果我通过浏览器(chrome)加载并登录到我的应用程序,并点击测试页面,我会得到JSSessionID=123,如果我启动firefox并登录,

Coldfusion会话-CF如何准确识别连接/唯一客户端

在使用远程CFC进行一些挖掘之后,我从Word VBA调用了它们,发现它们也设置了会话。这让我开始思考,并在谷歌上搜索(没有成功)来解释CF如何区分不同的客户。我之前假设它是一个浏览器cookie,用于识别客户端,但现在我通过word应用程序使用web服务,仍然获得会话变量和会话ID集

因此,如果我通过浏览器(chrome)加载并登录到我的应用程序,并点击测试页面,我会得到JSSessionID=123,如果我启动firefox并登录,我会得到与预期不同的JSSessionID=234。如果我使用单词VBA点击远程cfc作为web服务wsdl,我可以看到jsessionid=345返回到VBA模块。如果我关闭Word并重新打开宏(包含对web服务的登录请求),我会得到一个新的jsessionID=567

那么CF正在识别的请求是什么?它如何持久化客户机的标识

这与VBA http调用中的问题相同

 Sub doHTTP()

Dim MyRequest As Object
Dim Val
httpString = "http://localhost:8888/test.cfm"

Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")

MyRequest.Open "GET", httpString

' Send Request.
MyRequest.Send

MsgBox MyRequest.ResponseText

'now pass in the session urltoken we have just retreived

MyRequest.Open "GET", httpString & "?urltoken=" & MyRequest.ResponseText

' resend a request, this time with the urltoken.
MyRequest.Send

'take a look and see if the session variables are correct
MsgBox MyRequest.ResponseText

End Sub
在test.cfm中

<cfif isdefined("URL.urltoken")>
    <cfset session.urltoken="#URL.urltoken#">
  <cfelse>
    <cfset session.username="bob">
</cfif>


<cfoutput>session.urltoken="#session.urltoken#"</cfoutput><br>
<cfoutput>session.username="#session.username#"</cfoutput><br>
<cfoutput>session.sessionID="#session.sessionID#"</cfoutput>

session.urltoken=“#session.urltoken””
session.username=“#session.username#”
session.sessionID=“#session.sessionID#”

好的,现在可以了,有趣的是,我需要记住,对于不使用浏览器的web服务或http调用,我需要手动在URL中传递sessionID

基于浏览器cookie维护会话。在来自浏览器服务器的第一个请求中,分配令牌,这将用于在其余请求中建立会话连接。如果浏览器cookie被禁用,那么您可能需要它在URL中为每个请求传递CFID和CFTOKEN,并且在j2ee会话管理的情况下,您可能还需要传递jsessionId(最好的方法是在每个请求中附加session.URLToken)

在word宏中,您将获得新的JSSessionID,因为word可能没有cookie,也无法保持连接,但只需在下一次Webservice调用中尝试concat session.URLToken,即使在重新打开word后,您也会恢复所有会话,甚至您可以尝试从chrome浏览器请求复制session.URLToken并将其附加到firefox请求中,然后您就可以使用它了将在Chrome中获得相同的会话(如果您在不同的计算机上尝试,同样的事情也会起作用)


所以,这个故事的寓意是CFID、CFTOKEN、JSessionId(在J2ee会话管理的情况下)的组合,用于通过URL或Cookie在客户端和服务器之间建立连接。

我不知道在存在多个(或没有)Cookie/会话信息的情况下,Cookie/会话信息将存储在哪里安装的浏览器及其格式(例如,在没有打开浏览器的情况下访问web服务调用时)。有什么建议吗?@Saul,信息保存在服务器端和客户端。在没有浏览器或cookie被禁用的情况下,它将仅存储在服务器上,但它将使用响应头进行传输。我不知道如何在您正在工作的word中获取响应头,但您可以调用另一个请求URLtoken的webservice,稍后您可以将其附加到其他webserivce请求中。。希望我能证明你的问题是正确的。我以前没有想到过,因为我习惯于通过网页/浏览器访问cfc,如果有远程访问cfc as webs服务,如果我想使用会话范围,我需要“手动”在URL中传递会话ID。