2011-10-04 15 views
11

Para uno de nuestros requisitos estoy hablando entre dos servidores que usan el protocolo HTTP. La interacción es de larga duración, donde un usuario puede no interactuar con el otro sitio durante intervalos bastante largos.Mantener programáticamente HTTP Session Alive sin navegador

Cuando llegan a la página, inician sesión en el sitio remoto. Cada vez que el usuario intentaba interactuar con el sitio remoto, internamente realizaba una llamada HTTP (la authetication se realiza en base a sessionId).

Me preguntaba si también hay una forma de actualizar la sesión y garantizar que no caduque.

Según mi conocimiento limitado, el navegador maneja esto al pasar keep-alive en el encabezado o la cookie (que no entiendo del todo). ¿Alguien puede sugerir una forma programática en Java para lograr mantener el comportamiento vivo

+0

no hay tal magia; la conexión TCP/IP simplemente se deja abierta después de la primera solicitud si Keep-Alive está permitido. – EricLaw

+1

Necesitamos hacer una distinción entre el tiempo de espera de la conexión, que ocurre en la capa TCP/IP y no está relacionado con el tiempo de espera de la sesión HTTP, que ocurre en la capa anterior. Lo que @Fazal quiere mantener vivo es la sesión HTTP, no la conexión TCP. – Twilite

+0

Necesito esto para implementar una buena solución de SSO ... – CelinHC

Respuesta

0

Eche un vistazo a Apache HttpClient y vea its tutorial. HttpClient admite mantener encabezados activos y otras características que deberían permitirle realizar una llamada HTTP mediante programación.

+0

Gracias, lo intentaré y lo actualizaré pronto – Fazal

10

1.

<session-config> 
     <session-timeout>-1</session-timeout> 
</session-config> 

Basta con pegar esta pieza si el código en su descriptor de despliegue (DD).
Si desea mantener su sesión activa durante un período de tiempo determinado, reemplace -1 con cualquier valor numérico positivo.
El tiempo especificado aquí es en minutos.

2.

Si desea cambiar el valor de tiempo de espera de sesión para una instancia determinada sesión sin afectar la duración de tiempo de espera de cualquier otra sesión en la aplicación:

session.setMaxInactiveInterval(30*60); 


** * ** * ** * ** * ** * ** * ** * *
Nota:

1.En DD, el tiempo especificado está en minutos.
2. Si lo hace programáticamente, el tiempo especificado está en segundos.

Espero que esto ayude :)

+0

Gracias .. Me gusta esta idea. Pero mi intención aquí es simular el comportamiento del navegador. Así que solo mantendría la sesión activa si sigo recibiendo solicitudes del servidor remoto. Pero no sé qué encabezado para establecer en la solicitud http del servidor remoto para mantener viva la sesión – Fazal

1

supongo que a continuación código puede ayudar, si se puede pasar JSESSIONID galletas entonces su contenedor tendrá la responsabilidad de mantener la sesión activa si su misma sesión que podrían ser creado a partir de algún otro navegador .

encuentre el siguiente enlace que explica mucho.

Click Here

fragmento de código en el enlace anterior

BasicCookieStore cookieStore = new BasicCookieStore(); 
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "97E3D1012B3802114FA0A844EDE7B2ED"); 
    cookie.setDomain("localhost"); 
    cookie.setPath("/CookieTest"); 
    cookieStore.addCookie(cookie); 
    HttpClient client = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build(); 

    final HttpGet request = new HttpGet("http://localhost:1234/CookieTest/CookieTester"); 

    HttpResponse response = client.execute(request); 
Cuestiones relacionadas