Dudas con session y modo de leerlas

jormc
25 de Octubre del 2004
Muy buenas a [email protected]!

Estoy desarrollando mi proyecto de final de carrera, con MySQL, JSP y Tomcat, y me surje una duda. Os explico.

Mi index.jsp pide un login y un password, que compruebo contra la DB y si es correcto, creo una sesion nueva (session = request.getSession(true);), dónde introduzco como parámetros el login de la persona y otros datos. Mediante este login, se qué roles tiene y tal, y cuando hago un logout, destruyo la session mediante session.invalidate(). Hasta ahí bien, porque me redirijo al index.jsp principal y bien, pero si vuelvo a pedir los datos de la session accediendo a una página manualmente que pide datos de ella, me los devuelve del último usuario conectado correctamente como si la session aún existiese. Sin embargo, si hago un relaod de la misma página, hace lo que debería hacer, no darme los parámetros puesto que ya realicé el logout...

¿Alguien sabe por qué pasa esto? ¿Por qué la session no queda totalmente destruida? O sucede que el browser sigue viendo información de la misma hasta que no se recarga la página? Si es así, cómo puedo evitarlo para no necesitar hacer reload del browser?

Llevo mucho tiempo liado con esto y no soy capaz de solucionarlo, espero que podáis ayudarme!!!

Otra cosa, ¿cómo puedo hacer para que en cada página me diga si el usuario ha logeado o no? Tengo este código:

session = request.getSession(true);
if (session.isNew()) System.out.println("NO LOGUEADO");

Si la session existe todo va bien, pero si no existe, me devuelve un java.lang.NullPointerException.

Estos dos temas me tienen muy parado...

Muchas gracias!!!

Jordi

yo
25 de Octubre del 2004
no se a ver

A mi el primer problema tb me pasa, pero el 2º no se = me equivoco pero prueba a poner lo de request.getSession() asi sin el true entre parentesis porque creo recordar que si haces eso siempre crea una nueva sesion aunque no exista anteriormente.

jormc
25 de Octubre del 2004
Hola y gracas por responder.

Con y sin true, hace lo mismo... El segundo error creo que era de otro problema, porlo que no me interesa tanto. Pienso que puede ser porque no lee cada evz que visita una página la session, sino que "ecuerda" lo que el explorador ya ha escrito antes...

¿Alguien sabe qué puedo hacer para que cada evz que visite una página, sea por el modo que sea, lea el session correctamente?

Gracias!!!!

Diego.
25 de Octubre del 2004
prueba con esto a ver si hay suerte ;)

/*
* Get current session. Create a new one if needed.
*/
public static HttpSession getSession(HttpServletRequest req) {

HttpSession oldSession = req.getSession(false);
HttpSession session = req.getSession(true);

if (session.isNew() && (oldSession == null)) {
log.debug("New session created");
}
return session;
}

aetrejo
25 de Octubre del 2004
Con tu segunda duda, creo que lo que puede estar pasando es que cuadno no existe la session tú no puedes hacer un session.isNew(), porque la session es null, lo que tienes que hacer es:

if (session == null){
// y aquí lo quieres hacer...
}

Espero que te sirva...

aetrejo
25 de Octubre del 2004
Hola! perdón me equivoqué en algo que te contesté...

if (session != null){
// y aquí lo quieres hacer...
}