2010-10-18 17 views
5

Recientemente cambiamos nuestro inicio de sesión para usar HTTPS, y estamos teniendo problemas con el inicio de sesión.Inicio de sesión HTTPS no guardando el JSESSIONID en una cookie

Después del inicio de sesión, se redirige al usuario a una página no cifrada (HTTP). Cuando llega a esta página, el sitio comprueba si el usuario ha iniciado sesión. Crea una nueva sesión y parece que el usuario no ha iniciado sesión, por lo que nuestro usuario es redirigido a la página de inicio de sesión. Si el usuario inicia sesión de nuevo, funcionará.

Las cookies no están configuradas solo como https, pero parece que no funcionan en páginas http.

¿Alguien sabe por qué esto podría estar pasando?

Editar:

debería haber mencionado que la página que muestra el inicio de sesión está en un URL diferente. (Hay una página de inicio de sesión del equipo que ejecuta la instancia de tomcat, pero el sitio de marketing está en una instalación de wordpress y usa un dominio diferente).

No puedo usar el primer método de solicitud de HTTP para establecer la cookie, porque la configuración predeterminada de Internet Explorer impide que la cookie de sesión se guarde.

+0

¿Puede enviar la sesión como parámetro de publicación a la página http y hacer que configure la sesión en el nuevo dominio? –

+0

OP ha declarado que él/ella no podría verificar ninguna respuesta, por lo que se cierra como TL. – Kev

+0

Esto debe ser reabierto por los poderes ya que es un problema real y continuo que parece imposible de resolver. Tenemos un equipo de desarrolladores que han intentado adivinar una solución durante meses. La actualización de Tomcat no funcionó, ya que parece ser el comportamiento previsto, pero este comportamiento previsto hace que sea imposible trabajar con dominios externos y eso no es muy web 2.0. –

Respuesta

1

Al usar https tomcat establece el jsessionid a través de una cookie segura, que no se puede transmitir a través de una conexión no segura. Entonces, cuando vuelves a http, la sesión se pierde.

La solución temporal (que no he hecho yo mismo) parece ser establecer la sesión a través de una solicitud http antes de redirigir a https, y luego establecer un filtro en el HttpRequestWrapper para conectarlo a la cookie no segura.

no sé mucho sobre esto, pero aquí hay un par de referencias:

+0

Me pregunto por qué funciona para usted cuando el usuario inicia sesión por segunda vez. – christian

+0

Porque uno de los redireccionamientos va a una página HTTP (no segura). – partkyle

+0

Esto funcionaría, pero el problema es que nuestro sitio de marketing está en una URL diferente, lo que impide que Internet Explorer (con la configuración predeterminada, al menos) configure una cookie de otro dominio. ¿Tienes alguna idea sobre eso? – partkyle

3

Tenemos este problema con nuestra aplicación. Queríamos un comportamiento similar de inicio de sesión a través de https, luego redirigir a una página http.

El problema es que cuando Tomcat crea la sesión en https, crea una cookie segura que no se puede leer en http. Tenga en cuenta que esto sigue siendo archivado como un error en Tomcat y se marcó como "no es un error".

La solución que terminamos se basa en el mensaje en este foro http://forum.java.sun.com/thread.jspa?threadID=197150&start=0

Citando el hilo del foro: "Una manera de mantener la sesión en Tomcat, cuando la cookie de sesión se está creado en modo SSL se para engañar al navegador creando una cookie no segura, cuando se está creando la cookie segura ". Esto se logra a través de un filtro que envuelve la solicitud y anula request.getSession(). Funcionó muy bien para nosotros.

Como nota al margen, redirigir desde una página https a http aparecerá un mensaje de advertencia en algunas versiones de Internet Explorer "Estás a punto de ser redirigido a una conexión que no es segura". La única forma en que encontramos para evitar esto es hacer que la redirección se realice con una etiqueta meta refresh. Específicamente, devuelva una página en blanco de la solicitud https original con una metaetiqueta que se actualiza a una página http. Esto evita el mensaje de advertencia a expensas de hacer que el código sea un poco más intrincado.

(Me acabo de dar cuenta de que algunos de los consejos aquí son una repetición de una respuesta anterior; pido disculpas, pero publicaré de todos modos ya que es de experiencia directa).

Editar: Veo en sus comentarios que tiene dos dominios, lo que complica el uso de las cookies. ¿Puedes usar un servidor proxy o web como Apache para presentar solo un dominio a los usuarios finales?

+0

La nueva URL para el hilo del foro mencionado parece ser https://forums.oracle.com/forums/thread.jspa?threadID=1394970 – ivant

0

Si ha verificado que el indicador de solo seguridad está desactivado y que la primera cookie se está eliminando correctamente, supongo que puede haber un problema de ruta que impida que se vuelva a presentar la cookie.

Cuestiones relacionadas