2012-07-09 33 views
6

Estoy intentando determinar cómo recuperar la información de sesión utilizando un servidor Delphi REST DataSnap.Delphi XE2 Datasnap Gestión de sesión: obtener información de sesión después de la recarga de la página

Sé que, cuando se encuentra en la misma página de cliente, tiene acceso a la sesión actual de subprocesos mediante el método GetThreadSession de TDSSession.

Lo que quiero hacer, sin embargo, es almacenar datos en la sesión (putData) y aún así poder recuperarlos cuando el usuario se mueve de la página1 a la página2. En la actualidad, si el usuario se mueve a una página diferente, la sesión se pierde y se crea una nueva, perdiendo así los datos en la sesión que había establecido previamente.

He intentado jugar con TDSSessionManager.SetThreadSession (sessionid) - pero parece que no puedo hacer que funcione.

He revisado el muy aclamado libro blanco de Marco Cantu, sin embargo, no proporciona una solución a este problema.

Cualquier ayuda que pueda obtener sobre esto sería genial, incluso si es solo 'oye, este tema está cubierto en el libro X'.

Gracias!

Respuesta

0

Creo que lo que necesita hacer es establecer la propiedad LifeCycle de su instancia TDSServerClass en Session (con estado). De su pregunta, parece que actualmente está usando Invocation (sin estado).

+0

Disculpas: esa información habría sido útil al principio. El TDSServerClass tiene actualmente su propiedad LifeCycle establecida en Session. – ConBran

+0

Creo que esto debería funcionar de la caja si la conexión HTTP 1.1 KeepAlive está en efecto. –

+1

Fuera de la caja, las aplicaciones REST utilizan TIdHTTPWebBrokerBridge como servidor. De forma predeterminada, la propiedad KeepAlive es 'falsa', por lo tanto, siguiendo su sugerencia, cuando se inicia el servidor, estoy estableciendo la propiedad KeepAlive en 'verdadera', sin embargo, el problema persiste por desgracia. – ConBran

1

El TDSSessionManager.SetThreadSession (sessionid) funciona con Session.sessionname.

Además, asegúrese de que su Ciclo de vida esté configurado en Sesión (según lo indicado por tondrej).

Si vuelve a conectar su cliente. se inicia una nueva sesión Entonces quiere mantener abierta su conexión Datasnap.

O puede establecer el ciclo de vida del Servidor y gestionar las sesiones del cliente usted mismo.

Editar: Los servidores de reposo son apátridas. Por lo tanto, debe almacenar la página en la que se encuentra en el Cliente. Y consulta la página necesaria del servidor

1

Tienes que ajustar el JavaScript del lado del cliente para usar una cookie para almacenar información de la sesión.

Ver la última parte de JavaScript Client Sessions

Si desea mantener los objetos activos del lado del servidor para la sesión de utilizar el ciclo de vida de la sesión.

+0

Para recordar la ID de sesión entre cargas de página, debe habilitar la cookie de sesión. Para hacer esto, por ejemplo, llame al: initSessionData (true, "chat_"); –

Cuestiones relacionadas