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

标签 session vba coldfusion

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 ,这将用于在请求的其余部分建立 session 连接。如果浏览器 cookie 被禁用,那么您可能需要它为每个请求在 URL 中传递 CFID 和 CFTOKEN,并且在 j2ee session 管理的情况下,您可能还需要传递 jsessionId(最好的方法是在每个请求中附加 session.URLToken。)

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

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

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

相关文章:

xml - 如何在 Coldfusion 中将数组添加到 XML 对象?

coldfusion - 什么时候应该在 CFML 中使用自定义标签?

scala - Play 框架处理 session 状态

rest - Django REST 框架 : how to use session-based authentication properly?

vba - Excel VBA - 使用左函数和查找

vba - 向 Range 中的特定单元格添加注释。 Excel VBA

php - 从oracle SQL开发人员中查询列名查找表

php - 拉拉维尔 : Check if session exists necessary?

c# - 在 C# MVC3 中跨 Controller 重用 session

EXCEL VBA 检查条目是否为空 'space'