2009-09-05 19 views
8

Suponiendo que estoy publicando mi propio código de sesión, ¿cuál es la forma correcta de generar una cookie de identificación de sesión única y segura en Java?cookie de identificación de sesión en gwt rpc

¿No debería hacer mi propio pero usar algo que ya ha sido estandarizado?

Estoy usando gwt y la plataforma del motor de aplicaciones de google.

¿Cómo hago para que las sesiones persistan en los reinicios del navegador/servidor?

+0

Puede usar la sesión en Google App Engine. He proporcionado el enlace en la respuesta actualizada. –

+0

¿Cómo hago para que las sesiones persistan en los reinicios del navegador/servidor? –

+0

Una forma de mantener sesiones en todos los reinicios es tener sesiones respaldadas por una tienda de archivos o base de datos. Así es como funcionan los mecanismos de failover de sesión en la mayoría de los servidores de aplicaciones. Pero me pregunto por qué necesita esto en Google App Engine. –

Respuesta

24

Using Servlet Sessions in GWT

En el mando a distancia clase de implementación del servicio:

String jSessionId=this.getThreadLocalRequest().getSession().getId(); 

En el código de cliente:

String jSessionId=Cookies.getCookie("JSESSIONID"); 

Enabling_Sessions

appengine-web.xml

<sessions-enabled>true</sessions-enabled> 
2

No, no deberías rodar el tuyo.

La ID de sesión debe ser criptográficamente aleatoria (no se puede adivinar de fuentes conocidas). Es difícil hacer esto bien por ti mismo.

1

Idealmente, debe confiar en las características de gestión de sesiones del marco subyacente. Los servlets & JSPs, Struts y Spring tienen esta compatibilidad, que debe usar.

En el caso extremadamente raro de que esté escribiendo su propio marco sin funciones de gestión de sesión subyacentes en las que confiar, puede comenzar con la clase java.security.SecureRandom para empezar. Por supuesto, no reinvente la rueda aquí, porque la gestión de sesión interrumpida es lo mismo que la autenticación interrumpida.

actualización

Dado que está utilizando Google App Engine, debe confiar en las características de administración de sesión que proporciona el motor. It seems that it is not switched on by default.

+1

La gestión de sesiones forma parte de las especificaciones J2EE y está implementada por el servidor de aplicaciones/contenedor de servlets. De modo que, a menos que "escribir su propio marco" signifique "escribir código sobre el protocolo HTTP sin formato", siempre tendrá una gestión de sesiones en la que confiar. – ChssPly76

+0

Sí, eso es correcto. –

+0

Por cierto, Axis 1.x implementa la gestión de sesión utilizando la clase SecureRandom. No estoy seguro de por qué lo eligieron, pero este es el único caso excepcional que he encontrado. –

Cuestiones relacionadas