Foros del Web » Programación para mayores de 30 ;) » Java »

Generar nuevo Session ID JAVA, JSP, javascript...

Estas en el tema de Generar nuevo Session ID JAVA, JSP, javascript... en el foro de Java en Foros del Web. Hola buenos dias. Miren tengo una duda sobre las sessiones en JSP (no encontre el subforo adecuado creo que este es el que mas idoneo). ...
  #1 (permalink)  
Antiguo 22/11/2010, 03:52
 
Fecha de Ingreso: enero-2008
Mensajes: 35
Antigüedad: 16 años, 3 meses
Puntos: 1
Generar nuevo Session ID JAVA, JSP, javascript...

Hola buenos dias.

Miren tengo una duda sobre las sessiones en JSP (no encontre el subforo adecuado creo que este es el que mas idoneo).

En este momento mi aplicacion trabaja con sesiones que por supuesto tienen su ID de sesion. Si cierro el navegador y vuelvo abrir la sesion cambia y no hay problema, pero si dos usuarios se loguean en la aplicacion (sin cerrar el navegador), es decir un usuario se loguea y cierra session y otro hace lo mismo sin cerrar el navegador, ambos tendran el mismo ID.

¿Que puedo hacer para que cada vez que un usuario se logee en mi aplicacion tenga un id diferente?

Tengo alguna idea pero prefiero no comentar nada para no condicionar vuestras respuestas. Prefiero ver que soluciones se os ocurren. Si no sale nada os explico mi idea para desarrollarla.

Muchas gracias y un saludo.
  #2 (permalink)  
Antiguo 22/11/2010, 04:03
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Tema movido desde javascript
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 22/11/2010, 04:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

primero mencionar que jsp y javascript no tienen nada en comun. segundo, existe el subforo jsp. y tercero, segun lo que comentas, no creo que con javascript puedas solucionarlo. basicamente tienes que destruir la session cuando el usuario cierra la session. ¿como se destruye? no estoy muy seguro porque no manejo lenguaje servidor, pero asumiendo que jsp tiene caracteristicas similares a php y segun lo poco que he leido, jsp debe tener una funcion para destruir la session. basandome en lo que explicas, lo mas seguro ese resultado se produce porque en el cliente existe una cookie de session con el id. al no borrar esa cookie, el cliente envia la informacion al servidor haciendo entender que aun el usuario esta en session. desconozco si la funcion para destruir session tambien se encarga de borrar esa cookie, me imagino que si. de todos modos, es una idea para que puedas buscar la solucion mientras te mueven al foro jsp.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 22/11/2010, 04:14
 
Fecha de Ingreso: enero-2008
Mensajes: 35
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

Cita:
Iniciado por zerokilled Ver Mensaje
primero mencionar que jsp y javascript no tienen nada en comun. segundo, existe el subforo [url=http://www.forosdelweb.com/f67/]jsp[/url]. y tercero, segun lo que comentas, no creo que con javascript puedas solucionarlo. basicamente tienes que destruir la session cuando el usuario cierra la session. ¿como se destruye? no estoy muy seguro porque no manejo lenguaje servidor, pero asumiendo que jsp tiene caracteristicas similares a php y segun lo poco que he leido, jsp debe tener una funcion para destruir la session. basandome en lo que explicas, lo mas seguro ese resultado se produce porque en el cliente existe una cookie de session con el id. al no borrar esa cookie, el cliente envia la informacion al servidor haciendo entender que aun el usuario esta en session. desconozco si la funcion para destruir session tambien se encarga de borrar esa cookie, me imagino que si. de todos modos, es una idea para que puedas buscar la solucion mientras te mueven al foro jsp.
Gracias, lo siento busque por ahi pero no encontre el foro ( no busque mucho tampoco ). Ya se que no tienen nada que ver pero lo indique en el titulo porque las cookies son del navegador y a lo mejor habia que utilizar javascript.

Lo que comentas ya lo he intentado con la instruccion
Código:
request.getSession().invalidate();
en teoria esto deberia destruir la sesion actual y crear una nueva pero no lo hace. Y si la variable de sesion queda almacenada en una cookie.

Estaba mirando mas posibilidades pero pocas se me ocurren.

Gracias por contestar.
  #5 (permalink)  
Antiguo 22/11/2010, 10:12
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

Hola:

De hecho, request.getSession().invalidate() si destruye la sesión y borra todas las referencias a los objetos q estaban almacenados en ella. OJO: borra las referencias a los objetos, no los objetos en sí.
Si después deseas crear otra sesión para ese mismo request es suficiente con q hagas:
request.getSession(true)
Esto te crea una nueva sesión, con nuevo id y le envía al navegador una nueva cookie con ese id (en tomcat se llama JSESSIONID).

No explicas mucho acerca de la lógica de tu aplicación, ni mencionas q servidor de aplicaciones estás usando, pero lo q me extrañas es q dices:
Cita:
Iniciado por titogelo Ver Mensaje
... si dos usuarios se loguean en la aplicacion (sin cerrar el navegador), es decir un usuario se loguea y cierra session y otro hace lo mismo sin cerrar el navegador, ambos tendran el mismo ID...
Eso no debe ser posible en un servidor de aplicaciones q se respete. Los valores de los id de las sesiones son aleatorios.
Suponiendo q solamente estás utilizando sesiones basadas en cookies; la única forma en q dos peticiones tengan el mismo Id (y por lo tanto compartan la misma sesión) es q en ambas peticiones venga la misma cookie y por supuesto q a esa sesión no le hayan ejecutado un 'invalidate'.
Cuando hiciste esa prueba: ¿Estaban ambos usuarios accediendo desde el mismo navegador, en la misma máquina? si es así no hay problema, el explorador simplemente utilizó la cookie q ya existía para el segundo usuario.

Un poco de información y código de la aplicación q estás haciendo sería necesario para ayudarte más.

un saludo;

Nup_
  #6 (permalink)  
Antiguo 25/11/2010, 03:23
 
Fecha de Ingreso: enero-2008
Mensajes: 35
Antigüedad: 16 años, 3 meses
Puntos: 1
Pregunta Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

Cita:
Iniciado por nup_ Ver Mensaje
Hola:

De hecho, request.getSession().invalidate() si destruye la sesión y borra todas las referencias a los objetos q estaban almacenados en ella. OJO: borra las referencias a los objetos, no los objetos en sí.
Si después deseas crear otra sesión para ese mismo request es suficiente con q hagas:
request.getSession(true)
Esto te crea una nueva sesión, con nuevo id y le envía al navegador una nueva cookie con ese id (en tomcat se llama JSESSIONID).

No explicas mucho acerca de la lógica de tu aplicación, ni mencionas q servidor de aplicaciones estás usando, pero lo q me extrañas es q dices:


Eso no debe ser posible en un servidor de aplicaciones q se respete. Los valores de los id de las sesiones son aleatorios.
Suponiendo q solamente estás utilizando sesiones basadas en cookies; la única forma en q dos peticiones tengan el mismo Id (y por lo tanto compartan la misma sesión) es q en ambas peticiones venga la misma cookie y por supuesto q a esa sesión no le hayan ejecutado un 'invalidate'.
Cuando hiciste esa prueba: ¿Estaban ambos usuarios accediendo desde el mismo navegador, en la misma máquina? si es así no hay problema, el explorador simplemente utilizó la cookie q ya existía para el segundo usuario.

Un poco de información y código de la aplicación q estás haciendo sería necesario para ayudarte más.

un saludo;

Nup_

Lo siento por la tardanza.

A ver me explico. En primer lugar os pongo fragmentos de código.

Bien el proceso es el siguiente, desde un formulario en el login.jsp llamo (con struts) a la acción login.java en la que creo una session de la siguiente manera:
Código:
Map<String, Object> session=ActionContext.getContext().getSession();
a parte de crear la session hago las comprobaciones necesarias contra la BBDD y si todo es correcto meto el usuario en session de la siguiente manera:
Código:
        session.put("IC", user.getIC());
	session.put("nombre", user.getUserName());		
        session.put("fecha", user.getUltimoAcceso());
	session.put("nivel", user.getNivelAcceso());
	session.put("user", user);
	session.put("contador", cont);
Tras la redireccion que realiza la acción hacia el index.jsp el usuario ya esta en condiciones de utilizar la aplicacion.

Bien, ahora si este usuario desea abandonar la aplicacion ira a salir.jsp a traves de un boton en el menu. En este jsp hay lo siguiente:
Código:
<p>Adios <%	out.print(session.getAttribute("nombre")); %></p>
<% 
  HttpSession aux = request.getSession(true);
  System.out.print("Antes de eliminar session: "+session.getId());
  session.invalidate();
  System.out.print("Despues de eliminar session: "+session.getId());
  response.sendRedirect("login.jsp");
%>
Todo esto es lo que hago para manejar las sesiones. He de decir que ademas hago comprobaciones al principio de todos los archivos ".jsp" para que en el caso de que no haya ningun atributo en session nos redirija al login.jsp.

Por otro lado en "salir.jsp" una vez que hago session.invalidate(), los atributos dejan dejan de estar referenciados, (es decir en ese aspecto invalidate() funciona perfectamente), pero mi problema es que el ID de la session seguira siendo el mismo antes y despues de hacer el invalidate().

En relacion a lo que comentabas sobre el acceso de los dos usuarios, si, ambos acceden uno despues de otro desde el mismo navegador (sin que este se hubiera cerrado) y por supuesto en la misma maquina, asi que entiendo que este usando el id de session almacenado en las cookies. Bien es cierto que si cierro el navegador y vuelvo a abrir y hago otro login el id cambia, al igual que si accedo al mismo tiempo desde dos navegadores diferentes.

No se si se me queda algo en el tintero espero que no. Si algo no ha quedado claro no dudeis en preguntarme. Espero noticias.

Saludos.
  #7 (permalink)  
Antiguo 25/11/2010, 07:32
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

Hola:

El comportamiento de tu aplicación es normal.
No importa q el id del objeto session después de hacerle un invalidate() siga siendo el mismo, puesto q la sesión deja de estar registrada en el servidor.
Si lo q quieres es regenerar el sessionId, y q se le mande una nueva cookie al navegador, lo puedes hacer así:
Código JSP:
Ver original
  1. <%
  2.   HttpSession session = request.getSession(true);
  3.   System.out.print("Antes de eliminar session: "+session.getId());
  4.   session.invalidate();
  5.   session = request.getSession(true); // <-----   Se acaba de crear una nueva sesión
  6.   System.out.print("ID de la nueva session: "+session.getId());
  7.   response.sendRedirect("login.jsp");
  8. %>

puedes verificar q se le envía una nueva cookie al navegador con el Id de la sesión recién creada.

No se q servidor de aplicaciones estás usando, en tomcat ese código es suficiente, en jboss es necesario cambiar algunos parámetros de configuración en el servidor (de los cuales no puedo acordarme ahora).

Este link te puede ayudar:
http://www.koelnerwasser.de/?p=11


slds;

Nup_
  #8 (permalink)  
Antiguo 26/11/2010, 02:13
 
Fecha de Ingreso: enero-2008
Mensajes: 35
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

Cita:
Iniciado por nup_ Ver Mensaje
Hola:

El comportamiento de tu aplicación es normal.
No importa q el id del objeto session después de hacerle un invalidate() siga siendo el mismo, puesto q la sesión deja de estar registrada en el servidor.
Si lo q quieres es regenerar el sessionId, y q se le mande una nueva cookie al navegador, lo puedes hacer así:
Código JSP:
Ver original
  1. <%
  2.   HttpSession session = request.getSession(true);
  3.   System.out.print("Antes de eliminar session: "+session.getId());
  4.   session.invalidate();
  5.   session = request.getSession(true); // <-----   Se acaba de crear una nueva sesión
  6.   System.out.print("ID de la nueva session: "+session.getId());
  7.   response.sendRedirect("login.jsp");
  8. %>

puedes verificar q se le envía una nueva cookie al navegador con el Id de la sesión recién creada.

No se q servidor de aplicaciones estás usando, en tomcat ese código es suficiente, en jboss es necesario cambiar algunos parámetros de configuración en el servidor (de los cuales no puedo acordarme ahora).

Este link te puede ayudar:
http://www.koelnerwasser.de/?p=11


slds;

Nup_
Perdón no me di cuenta de comentartelo mi servidor de aplicaciones, lamentablemente por lo que veo, es JBOSS. He probado a poner la linea que me indicas y no funciona. Tendré que echar un vistazo en esa pagina, de la cual ya adelanto, que estuve mirando por encima y no saque mucho en claro.

Un saludo y muchas gracias.

EDITO: He echado un vistazo y he buscado todo lo relacionado con jboss invalidate session y solo he encontrado un par de cosas que no funcionaron. Una de ellas consistia en cambiar en server.xml la variable emptySessionPath a false.

Supongo que lo que me comentas irá bien con TomCat pero con Jboss no funciona. No se porque pero es asi.

Muchas gracias por el tiempo invertido.

Un saludo.

Última edición por titogelo; 26/11/2010 a las 03:01
  #9 (permalink)  
Antiguo 26/11/2010, 11:50
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

Hola:

¿Qué versión de JBoss estás usando?
Acabo de probar eso en jboss 4.2.3GA y funciona correctamente cambiándole emptySessionPath a false en los archivos:
/jboss-4.2.3.GA/server/all/deploy/jboss-web.deployer/server.xml
/jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml

regenera el sessionId sin problemas.

Código Java:
Ver original
  1. PrintWriter out = response.getWriter();
  2. out.println("OLD: " + request.getSession(true).getId());
  3. request.getSession(false).invalidate();
  4. out.println("NEW: " + request.getSession(true).getId());

slds;

Nup_
  #10 (permalink)  
Antiguo 26/11/2010, 12:24
 
Fecha de Ingreso: enero-2008
Mensajes: 35
Antigüedad: 16 años, 3 meses
Puntos: 1
De acuerdo Respuesta: Generar nuevo Session ID JAVA, JSP, javascript...

Cita:
Iniciado por nup_ Ver Mensaje
Hola:

¿Qué versión de JBoss estás usando?
Acabo de probar eso en jboss 4.2.3GA y funciona correctamente cambiándole emptySessionPath a false en los archivos:
/jboss-4.2.3.GA/server/all/deploy/jboss-web.deployer/server.xml
/jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml

regenera el sessionId sin problemas.

Código Java:
Ver original
  1. PrintWriter out = response.getWriter();
  2. out.println("OLD: " + request.getSession(true).getId());
  3. request.getSession(false).invalidate();
  4. out.println("NEW: " + request.getSession(true).getId());

slds;

Nup_
Hola muchas gracias nup_; ahora mismo no puedo revisarlo pero en cuanto tenga un rato lo reviso espero que funcione la verda que tiene muy buena pinta.

Te mantendre informado con lo que sea. Un Saludo.

Etiquetas: javascript, jsp, session
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:29.