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

problemas con las sesiones

Estas en el tema de problemas con las sesiones en el foro de Java en Foros del Web. Buenas a todos! Tengo una página que se crea dinámicamente y que utiliza sesiones para almacenar algun valor. Todo va bien cuando sólo trabajo sobre ...
  #1 (permalink)  
Antiguo 04/03/2009, 12:03
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 0
problemas con las sesiones

Buenas a todos!

Tengo una página que se crea dinámicamente y que utiliza sesiones para almacenar algun valor.

Todo va bien cuando sólo trabajo sobre un navegador Mozilla pero en el momento que abro otro navegador IE me sale un error 500 diciendome que no se pueden recuperar los elementos guardados. Aunque si recargo de nuevo la página crea una nueva sesion y ya sigue todo bien. (Que es lo que tendría que hacer desde un principio)

Pongo por encima el código:

Llamada a un servlet que hace lo siguiente
Código:
sesion = request.getSession(); //Recupero los valores de la sesion

           if(lm == null){
                      //realizo una serie de sentencias y añado elementos a lm
                      sesion.setAttribute("lista", lm); //guardo el valor lm en el objeto sesion
           else{
            lm = (List)sesion.getAttribute("lista");
             //opero con lm

           }
Estoy seguro que es que tengo que hacer algun tipo de comprobaciones pero nunca he utilizado el objeto session y no lo domino aun.

¿sabeis porque me falla cuando abro otro navegador diferente y que debo hacer para arreglarlo?

Muchas Gracias
  #2 (permalink)  
Antiguo 04/03/2009, 12:19
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: problemas con las sesiones

te podria ayudar mas si fueras un poquito mas especifico, por ejemplo, q hay antes de llamar a ese servlet, q parametros le mandas al servlet, que es "lm", etc, etc, ok, no importa que pongas mucho codigo, eso es lo de menos, bueno bye
  #3 (permalink)  
Antiguo 04/03/2009, 13:00
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: problemas con las sesiones

Antes de llamar al servlet hay una llamada AJAX que se hace desde una index.jsp

El servlet te crea un documento.xml que se procesará en un fichero.js

Necesito almacenar una lista lm con componentes de la página para usar si se refresca al pulsar F5 para que no se eliminen los cambios.

Entonces lo que hago es crearla la primera vez cuando es null y despues ya accedo a ella para recuperar dichos valores.

La cosa es que he estado probando y me he dado cuenta que cuando abro un navegador el ID de la sesion es diferente para cada uno de los navegadores pero se quedan restos de la lista lm es decir que cuando abro el otro navegador por primera vez esa lista no es nula por eso da problemas.

Habia probado de hacer sesion.isNew() pensando que cuando abriese el otro navegador daría true( como tienen diferentes ID de sesion) pero no da false.

entonces como quedan restos de la lista lm de la sesion del otro navegador cuando hago
lm = (List)sesion.getAttribute("lista");
se produce el error.

En resumen:

Abro el IE 1º y se carga todo ok refresco IE y ok

Pero si abro seguidamente el Mozilla entonces al hacer la comprobación lm==null sale que tiene elementos(de la sesion que tiene IE) y hace la llamada lm = (List)sesion.getAttribute("lista"); y se produce el error.

Me he explicado bien?

Mi pregunta era que comprobación tendría que hacer para que no salga el error.
  #4 (permalink)  
Antiguo 04/03/2009, 13:22
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: problemas con las sesiones

y si en vez de checar si lm es null, checas la lista de la sesion que acabas de crear, o sea si pones
Código PHP:
if(sesion.getAttribute("lista")==null
en lugar de
Código PHP:
if(lm == null
asi como es una sesion nueva cualquier atributo de la sesion seria null, espero q te sirva, si no, pues me dices, para ver si puedo hacer algo mas, bye
  #5 (permalink)  
Antiguo 04/03/2009, 13:34
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: problemas con las sesiones

Me da la impresión que estás utilizando mal la sesión. Deberías hacer la comparación de lm con null después de obtener el objeto lm desde la sesión.

Digamos, algo así:

Código:
sesion = request.getSession();
List lm = (List) sesion.getAttribute("lista");

if(lm == null) {
     lm = ... // Acá creas el objeto lm y le asignas lo que quieras
     sesion.setAttribute("lista", lm); //guardás el objeto lm en la sesion
}
// Seguis con la ejecucion
La idea general es

a) Obtenemos la sesión del usuario. Si no existe una sesion con el usuario, entonces se crea automáticamente.
b) Obtenemos la lista desde la sesión del usuario. Si no existe una lista en la sesión, entonces el método getAttribute devuelve null.
c) Vemos si en lm tenemos el valor null. Si tiene null, es porque no había una lista en la sesión, y por ello tenemos que crear una nueva lista y guardarla en la sesión.
d) Si no tenia null, seguimos operando normalmente.

Espero que te sea de ayuda.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #6 (permalink)  
Antiguo 04/03/2009, 14:40
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: problemas con las sesiones

Pues efectivamente teníais razon estaba utilizando mal la sesion! como decis.. si lo hago de esa manera no salen errores en el navegador.!!
Y funciona ok.

Aunque en el NetBeans que es donde estoy trabajando sale una

ADVERTENCIA No puedo serializar atributo de sesion lista para sesion 1FC461AF904B48700BEF72707B1DE181
y
GRAVE: Servlet.service() para servlet

como si diese un error avisandome de que la llamada List lm = (List) sesion.getAttribute("lista");
da problemas porque no se existe en un principio creada en la sesion.

Entonces lo que he hecho ha sido poner al principio de todo:

Código:
 if(sesion.isNew()){
               sesion.setAttribute("lista", lm);
           }

sesion = request.getSession();
List lm = (List) sesion.getAttribute("lista");

if(lm == null) {
     lm = ... // Acá creas el objeto lm y le asignas lo que quieras
     sesion.setAttribute("lista", lm); //guardás el objeto lm en la sesion
}
// Seguis con la ejecucion
Y asi parece que va ok

Muchisimas Gracias por vuestra ayuda
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 22:12.