2011-06-26 11 views
5

Sesje ColdFusion - jak dokładnie jest CF identyfikacji połączenia/wyjątkowy klientColdFusion sesje - jak dokładnie jest CF identyfikujących połączenia/wyjątkowy klient

Po wykonaniu niektórych kopanie z odległych CFC zadzwoniłem z programu Word VBA znalazłem one ustawione sesje również. Które zmusiło mnie do myślenia i Googling (bez powodzenia) dla wyjaśnienia, w jaki sposób CF rozróżnia różnych klientów. Wcześniej zakładałem, że jest to plik cookie przeglądarki, który identyfikuje klienta, ale w tym przypadku korzystałem z usługi internetowej za pomocą aplikacji słownej i nadal otrzymywałem zmienne sesji i zestaw identyfikacyjny sesji.

Więc jeśli załaduję i zaloguję się do mojej aplikacji przez przeglądarkę (chrome) i trafię na stronę testową, otrzymam jsessionID = 123, jeśli uruchomię firefox i zaloguję się, otrzymam inny jsessionid = 234 zgodnie z oczekiwaniami. Jeśli trafię zdalny cfc jako usługa wsdl usługi Web przy użyciu Word VBA, widzę jsessionid = 345 zwrócone do modułu VBA. Jeśli zamykam program Word i ponownie otwieram moje makro (zawierające żądanie logowania do usługi sieciowej), otrzymuję nowy identyfikator jsessionID = 567

Co to jest w przypadku żądania identyfikowania CF i utrzymywania identyfikacji klienta ?

Jest to ten sam problem w VBA http rozmowy

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 

w 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> 

OK, że teraz działa, ciekawe, będę musiał pamiętać o usługi internetowej lub http nie używa przeglądarki, będę musiał ręcznie przekazać identyfikator sesji w adresie URL.

+0

Czy możesz pokazać swój kod VBA? – Antony

Odpowiedz

2

Zdecydowanie sesja jest utrzymywana w oparciu o plik cookie przeglądarki. Na pierwsze żądanie z serwera przeglądarki przypisz token, a to posłuży do połączenia sesji w pozostałej części żądania. Jeśli pliki cookie przeglądarki są wyłączone, może być konieczne przekazanie CFID i CFTOKEN w adresie URL dla każdego żądania, a w przypadku zarządzania sesją j2ee może być konieczne przekazanie również jsessionId (najlepszym sposobem jest dołączenie session.URLToken w każdym żądaniu).

W makrze słowo zyskujesz nowe jsessionId, ponieważ słowo może nie mieć pliku cookie i nie może utrwalić połączenia, ale po prostu spróbuj połączyć sesję.URLToken w następnym wywołaniu Webservice, a otrzymasz całą swoją sesję z powrotem nawet po ponownym otwarciu słowa lub nawet możesz spróbować skopiuj sesję.URLToken z żądania przeglądarki Chrome i dołącz ją do żądania firefox, a dostaniesz tę samą sesję dostępną w Chrome (to samo będzie działać, jeśli spróbujesz także z innego komputera).

Tak moralna fabuła to połączenie CFID, CFTOKEN, JSessionId (w przypadku zarządzania sesją J2ee) do połączenia między klientem a serwerem za pośrednictwem adresu URL lub pliku Cookie.

+0

Zastanawiałem się, gdzie przechowywane są informacje o plikach cookie/sesjach w przypadkach, w których zainstalowanych jest kilka (lub nie) przeglądarek iw jakim formacie, na przykład, gdy tylko dostęp do wywołania usługi internetowej bez otwartej przeglądarki. Wszelkie sugestie, jak mogę się dowiedzieć? – Saul

+0

@Saul, Informacje zapisane na serwerze po stronie i kliencie. W przypadku wyłączenia przeglądarki lub pliku cookie będzie on przechowywany tylko na serwerze, ale zostanie przesłany z nagłówkiem odpowiedzi. Nie jestem pewien, jak uzyskać nagłówek odpowiedzi w słowie, w którym pracujesz, ale możesz zadzwonić do innego serwisu internetowego, który zażądał URLtoken, który później możesz dołączyć do innych żądań webserivce .. mam nadzieję, że jestem w stanie uzasadnić twoje pytanie. –

+0

Nie przyszło mi to wcześniej do głowy, ponieważ jestem przyzwyczajony do uzyskiwania dostępu do cfcs za pośrednictwem strony internetowej/przeglądarki, że jeśli zdalny dostęp do cfc jest usługą internetową, będę musiał "ręcznie" przekazać URL sesji w adresie URL, jeśli chcę użyj zakresu sesji. – Saul