JSP session

Respuesta de
a
Usuario
<div class="itemtext2">
Hola a todos!
Estoy empezando con jsp y no consigo mantener sesión. Creo la sesión en una página con
HttpSession sesion = request.getSession(true)
y mediante un jsp:forward paso a otra pagina pasando le la sesion con
HttpSession sesion = request.getSession()
e imprimo el identificador de sesión con
System.out.println(sesion.getId())
Hasta aqui todo bien pero cuando paso de esta segunda pagina a otra
tercera (haciendo igual que de la primera a la segunda) la sesion me
cambia.
¿Como deberia pasar las sesiones?
Gracias de ante mano.

</div>
Avatar
Experto
Hola,
En teoría la sesión no tienes por qué crearla o andar a pasarla entre las páginas. Se supone que es automático y lo hacen entre el servidor (¿Tomcat?) Y el explorador (¿firefox? ¿IE?).
Lógicamente el servidor debe estar bien configurado para mantener las sesiones (lo cual suele ser habitual de fábrica) al igual que el explorador (por ejemplo que estén activadas las Cookies). En las páginas no debe haber tampoco comandos que provoquen el cambio de sesión (como un invalidate() de la sesión, o como un enlace a otra dirección con distinto dominio base)
Para poder saber el problema concreto necesito todos esos datos y no vendría mal que pusieras el código (resumido) de las páginas jsp que te están dando problemas
Usuario
Hola, muchas gracias por tu respuesta.
El problema era que en
La cabecera de todas las páginas tengía un formulario para cerrar sesión
y dentro del formulario ponía invalidate(). Claro esta, en cuanto entraba a
cualquier página adiós sesión.
Pensaba/suponía que este invalidate no se ejecutaba algo estúpido ... será la inexperiencia.
De todos modos te voy a hacer un par de consultas:
1.- ¿Es necesario poner en la cabecera de las páginas "<%@page session=true%>" para usar la sesión? ¿Cuál es su función?
2.- Cuando cojo la sesión en una página (para dar valor al parámetro o para consultarlo) yo lo hago con "HttpSession sesión = request.getSession(true)". ¿Hay que poner el true? ¿Qué significa? En unos manuales lo ponen en otros no...
Bueno, muchas gracias por la atención.
Avatar
Experto
Hola de nuevo.
En cuanto a : <%@ page session="true" %>
No es necesario ya que por defecto es "true". Puede ser útil porque si se pone permite usar la variable implícita "session" en el JSP.
Aquí puedes ver la explicación de las directivas
http://nlc.nlc.go.cn/resin-doc/jsp/directives.xtp
En cuanto a request.getSession(true):
Es lo mismo que poner request.getSession(). Lo que hace es devolver la sesión actual si existe, y si no existe CREA UNA NUEVA. Si le pasamos "false" no crea una nueva si no existe la actual. Lo normal es usarlo con "true" ya que querremos crear una sesión si no tenemos una actualmente (si queremos usar sesiones, claro)
Espero haberte ayudado. Recuerda cerrar la pregunta si no tienes más dudas. (O ciérrala mejor y preguntas de nuevo si tienes nuevas dudas)
Un saludo
Usuario
Muchas gracias. Voy a echarle un vistazo a las directivas.
Gracias.