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

Problema con sesiones

Estas en el tema de Problema con sesiones en el foro de Java en Foros del Web. Saludos!! Soy nuevo con la programación web y estoy atascado posiblemente con alguna tontería. Tengo un cliente y un servidor que funcionaban perfectamente hasta que ...
  #1 (permalink)  
Antiguo 26/08/2011, 11:03
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 9 meses
Puntos: 2
Problema con sesiones

Saludos!! Soy nuevo con la programación web y estoy atascado posiblemente con alguna tontería. Tengo un cliente y un servidor que funcionaban perfectamente hasta que inclui las sesiones.

El cliente llama a un servlet al iniciar su comportamiento que define la sesion, tal que así:

Código:
HttpSession sesion = request.getSession(true);//creamos una sesion, si ya la tiene creada la mantiene

				/* Añadimos a la sesión el campo “Login” con el valor de tLogin */
				sesion.putValue("logueado", true);
				sesion.putValue ("nombre", nombre);
				sesion.putValue("pass", auxUsuario.getPassword());
				sesion.setMaxInactiveInterval(360); //Una hora sin cambios cierra la sesion
Y el cliente sigue con su comportamiento normal, lo único que hago luego es que cada vez que llama a algun servlet para interactuar con el servidor lo primero que hago es comprobar si los datos de la sesion son los que yo introducí. Y si no lo son directamente mandar al cliente a crear una sesión nueva. Lo que pasa es que no me recupera los datos de la sesión en otros servlet. Evidentemente es algo que hago yo mal xq no tengo mucha idea

Me devuelve todos lo parametros a null

Código:
HttpSession sesion=request.getSession(true);
		
		
		try {
			
			boolean logueado=(Boolean) sesion.getAttribute("logueado");
			String user=(String) sesion.getAttribute("nombre");
			String contrasena=(String) sesion.getAttribute("pass");
			System.out.println("logueado: "+logueado+" nombre:"+user+" contra:"+contrasena);
			if((logueado==null) || (user==null) || (contrasena==null)){
				System.out.println("Error, en la sesion");
                  //Aqui se tomarían las medidas oportunas
Si alguien me pudiera corregir un poco sería de mucha ayuda

Última edición por atapuerkasman; 26/08/2011 a las 11:09
  #2 (permalink)  
Antiguo 26/08/2011, 13:29
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Problema con sesiones

Si estás usando getAttribute, ¿por qué usas putValue (deprecated) en vez de setAttribute?

Aparte de eso, deberías primero asegurarte de que has guardado los datos en la sesión, y está claro que deberías coger un tutorial y empezar por ahí, porque además de no tener mucho sentido tu login, lo de dejar la clave en la sesión es un agujero de seguridad.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 27/08/2011, 01:17
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Problema con sesiones

Saludos!!! he cambiado en el servlet que inicia la sesion los metodos put por setAtribute, y además muestro que los datos se han guardado correctamente.

El problema es que cuando accedo con otro servlet hago getAtribute y me dice que toddos los atributos estan a null. El codigo, es muy parecido al de antes

Servlet inicio sesion

Código:
try {
				HttpSession sesion = request.getSession(true);//creamos una sesion, si ya la tiene creada la mantiene

				
				sesion.setAttribute("logueado", true);
				sesion.setAttribute("nombre", nombre);
				
				sesion.setMaxInactiveInterval(360); //Una hora sin cambios cierra la sesion
				
				System.out.println("Logueado: "+sesion.getAttribute("logueado")+" Nombre: "+sesion.getAttribute("nombre"));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				out.println("Error en la creacion de la sesion");
				
			}

Servlet que confirma sesión

Código:
		try {
			HttpSession sesion=request.getSession(true);
			Boolean logueado=(Boolean) sesion.getAttribute("logueado");
			String user=(String) sesion.getAttribute("nombre");
			
			System.out.println("logueado: "+logueado+" nombre:"+user);
			if((logueado==null) || (user==null)){
				System.out.println("Error, en la sesion");
				if(Controlador.DesactivarUsuario(nombre)){
					System.out.println("Error en la Sesion. se han guardado los datos de usuario para evitar errores.");
				}
				
				out.print("desconectar");
				return;
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("error, la sesion no existe");
			e.printStackTrace();
			
		try {
			HttpSession sesion=request.getSession(true);
			Boolean logueado=(Boolean) sesion.getAttribute("logueado");
			String user=(String) sesion.getAttribute("nombre");
			
			System.out.println("logueado: "+logueado+" nombre:"+user);
			if((logueado==null) || (user==null)){
				System.out.println("Error, en la sesion");
				if(Controlador.DesactivarUsuario(nombre)){
					System.out.println("Error en la Sesion. se han guardado los datos de usuario para evitar errores.");
				}
				
				out.print("desconectar");
				return;
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("error, la sesion no existe");
			e.printStackTrace();
                 }
¿aguien sabe de donde puede venir el error?? perdonar mis errores pero es la primera vez que trabajo con sesiones
  #4 (permalink)  
Antiguo 27/08/2011, 05:58
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Problema con sesiones

¿Cómo llamas a los servlet desde la jsp?

Otra cosa

sesion.setMaxInactiveInterval(360) no es una hora, son seis minutos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 27/08/2011, 13:21
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Problema con sesiones

No los llamo desde una jsp, los llamo desde una aplicación mediante un metodo Post

así:

Código:
public boolean envioPost(){
		httpcliente= new DefaultHttpClient();
		// siendo ruta de tipo /servletLoquesea
		HttpPost post = new HttpPost("http://192.168.1.106:8080/servidor"+ruta);
		try {
			post.setEntity(new UrlEncodedFormEntity(datos));
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
			return false;
		}

			try {
				
				response = httpcliente.execute(post);
				
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return false;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return false;
			}
			return true;
	}
En la ruta va el servlet especifico al que deseo acceder ej: ruta="/servletSesion";
  #6 (permalink)  
Antiguo 27/08/2011, 16:58
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Problema con sesiones

El problema es que al hacerlo desde una aplicación, al acceder al servlet éste considera que estás accediendo con un nuevo usuario, por lo que se reinicia la sesión. Puedes comprobarlo viendo el identificativo de session getId()

Aquí puedes ver una explicación aproximada del problema, aunque visto desde aplicaciones web.

http://www.geeksengine.com/article/j...t-session.html

Puede que la solución sea que no crees un objeto post cada vez que quieres llamar a un servlet, que utilices siempre el mismo objeto. No sé, poco más te puedo decir, yo de aplicaciones de escritorio no sé nada.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: jsp-servlets, servlet
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 09:53.