Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/11/2010, 03:23
titogelo
 
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.