2011-06-26 25 views
5

sesiones Coldfusion - ¿cómo es exactamente CF identificar una conexión/cliente únicosesiones Coldfusion - ¿cómo es exactamente CF identificación de una conexión/cliente único

Después de hacer algo de investigación con CFC remotas que he llamado de la Palabra VBA encontré que establecen sesiones además. Lo que me hizo pensar y buscar en Google (sin éxito) una explicación de cómo CF distingue entre diferentes clientes. Anteriormente había supuesto que se estaba configurando una cookie del navegador para identificar al cliente, pero luego estaba consumiendo un servicio web a través de una aplicación de palabras y todavía obtenía las variables de sesión y el ID de sesión establecido.

Así que si cargo e inicio sesión en mi aplicación a través del navegador (chrome) y toco una página de prueba obtengo jsessionID = 123, si enciendo firefox y inicio de sesión obtengo un jsessionid = 234 diferente como se esperaba. Si presiono un cfc remoto como un servicio web wsdl usando Word VBA, puedo ver que jsessionid = 345 regresó al módulo VBA. Si cierro Word y vuelvo a abrir mi macro (que contiene una solicitud de inicio de sesión para el servicio web) obtengo un nuevo jsessionID = 567

Entonces, ¿qué tiene la solicitud que CF está identificando y cómo persiste la identificación del cliente? ?

Ésta es la misma cuestión en una llamada 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 

en un 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> 

bien que ahora trabaja, interesante, voy a tener que recordar para el servicio web o http llamadas que no usan un navegador. Tendré que pasar el ID de sesión en la URL manualmente.

+0

¿Puedes mostrar tu código VBA? – Antony

Respuesta

2

Definitivamente se mantiene la sesión basada en la cookie del navegador. En la primera solicitud del servidor de navegador asignar token y esto se utilizará para hacer la conexión de sesión en el resto de la solicitud. Si las cookies del navegador está desactivada, es posible que tenga que pasar CFID y CFTOKEN en la URL para cada solicitud y en caso de gestión de sesiones J2EE que tenga que pasar JSESSIONID así (la mejor manera es añadir session.URLToken en cada petición.)

en macro de Word se obtiene nuevos JSESSIONID porque la palabra no puede tener galleta y no es capaz de persistir conexión, pero sólo trato de concat session.URLToken en la siguiente llamada de servicio web y obtendrá toda la sesión posterior, incluso después de la reapertura de la palabra, o incluso se puede tratar copie la sesión.URLDespués de solicitar el navegador chrome y añádalo en la solicitud de Firefox y obtendrá la misma sesión disponible en Chrome (lo mismo funcionará si lo intenta desde otra computadora también).

Así que la moral de la historia es la combinación de CFID, CFTOKEN, JSessionId (en el caso de la administración de sesión J2ee) para la conexión entre el cliente y el servidor, ya sea a través de URL o Cookie.

+0

me preguntan por el que la información de cookie/sesión se almacena en los casos en los que hay varios (o ninguna) navegadores instalados y en qué formato, por ejemplo, cuando se acaba de acceder a una llamada de servicio web sin navegador abierto. ¿Alguna sugerencia de cómo puedo averiguarlo? – Saul

+0

@Saul, información guardada tanto en el servidor secundario como en el cliente. En caso de que no haya un navegador o una cookie deshabilitada, se almacenará solo en el servidor, pero se transferirá dentro del encabezado de respuesta. No estoy seguro de cómo llegar cabecera de la respuesta de palabra donde está trabajando pero puede llamar a otro servicio web que lo soliciten URLtoken que más tarde se puede añadir con otra petición webserivce .. espero poder justificar su pregunta. –

+0

No se me había ocurrido antes porque estoy acostumbrado a acceder a los CFC a través de la página web/navegador que si hay un acceso remoto a un servicio de CFC como telas que tendrá que pasar "manual" en el sessionId en la URL si deseo usar el alcance de la sesión – Saul

Cuestiones relacionadas