Сеансы Coldfusion - как точно CF идентифицирует соединение / уникальный клиент
После некоторого копания с удаленными CFC, которые я вызывал из Word VBA, я обнаружил, что они также устанавливают сеансы.Что заставило меня задуматься и поискать в Google (безуспешно) объяснение того, как CF различает разных клиентов.Ранее я предполагал, что это cookie-файл браузера, устанавливаемый для идентификации клиента, но затем здесь я использовал веб-сервис через приложение word и все еще получал переменные сеанса и набор sessionID.
Так что, если я загружу ивойти в мое приложение через браузер (chrome) и перейти на тестовую страницу, я получаю jsessionID = 123, если я запускаю firefox и вход в систему, я получаю другой jsessionid = 234, как и ожидалось.Если я запускаю удаленный cfc как веб-службу wsdl с помощью Word VBA, я вижу, что jsessionid = 345 возвращается в модуль VBA.Если я закрою Word и снова открою свой макрос (содержащий запрос на вход в веб-службу), я получу новый jsessionID = 567
Так что же такое запрос, который идентифицирует CF, и как он сохраняет идентификациюклиент?
Это та же проблема в http-вызове VBA
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>
Хорошо, что теперь работает, интересно, янужно будет помнить, что для веб-службы или вызовов HTTP, не использующих браузер, мне нужно будет передать идентификатор сессии в URL-адресе вручную.