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

我从Word VBA调用了远程CFC后,发现它们也设置了 session 。这就让我开始思考和谷歌搜索(未成功)来解释CF如何区分不同的客户。我以前曾假设它是设置为标识客户端的浏览器cookie,但是随后在这里,我通过word应用程序使用了Web服务,并且仍然设置了 session 变量和sessionID。

因此,如果我通过浏览器(chrome)加载并登录到我的应用程序并访问测试页面,则会得到jsessionID = 123;如果启动firefox并登录,则会得到与预期不同的jsessionid = 234。如果使用Word 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>

好了,现在可以工作了,很有趣,我需要记住不使用浏览器进行的Web服务或http调用,我需要手动在URL中传递sessionID。

最佳答案

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

在word宏中,您将获得新的jsessionId,因为word可能没有Cookie且无法持久连接,而只是尝试连接session.URLToken在下一个Webservice调用中,即使重新打开word后您也可以恢复所有 session ,甚至可以尝试复制 session chrome浏览器请求中的.URLToken并将其附加到firefox请求中,您将在Chrome中获得相同的 session (如果您尝试从另一台计算机尝试同样的操作,也可以使用)。

因此,故事的寓意是CFID,CFTOKEN,JSessionId(在J2ee session 管理的情况下)的组合,用于通过URL或Cookie进行客户端和服务器之间的连接。

关于session - Coldfusion session -CF如何准确地识别连接/唯一客户端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6486699/

10-13 05:31