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

Problema recuperando cookies en una plantilla

Estas en el tema de Problema recuperando cookies en una plantilla en el foro de Java en Foros del Web. Buenas... A ver si entre todos podemos resolver un problema de cookies al que llevo bastante tiempo dándole vueltas y sigo sin verle la lógica. ...
  #1 (permalink)  
Antiguo 21/05/2009, 09:25
 
Fecha de Ingreso: julio-2006
Ubicación: Desde mi casa
Mensajes: 14
Antigüedad: 17 años, 9 meses
Puntos: 0
Problema recuperando cookies en una plantilla

Buenas...

A ver si entre todos podemos resolver un problema de cookies al que llevo bastante tiempo dándole vueltas y sigo sin verle la lógica.

Tengo una plantilla general en jsp, de la que tiran todas las páginas del sitio y una página de normas de uso con un formulario para aceptar dichas normas.

El comportamiento a buscar es que cuando visito alguna página por primera vez, se muestran las normas de uso. Una vez aceptadas dichas normas, se almacena una cookie indicando que las normas han sido leídas y se redirecciona a la página anteriormente solicitada.

El código que busca la cookie en la plantilla general es el siguiente...

Código:
HttpSession sesion = request.getSession(true);
	if(session.getAttribute("normas") == null)
		session.setAttribute("normas","0");

	String cookieName = "normasleidas";
	Cookie myCookie = null;
	Cookie cookies [] = request.getCookies();
	if(cookies != null)
	{
		for(int i = 0; i < cookies.length; i++)
		{
			if(cookies [i].getName().equals(cookieName))
			{
				myCookie = cookies[i];
				session.setAttribute("normas","2");
			}
		}
	}

	String normas = session.getAttribute("normas").toString();

	if(normas.equals("0")){
		session.setAttribute("urlreq",cms.link(url));
		session.setAttribute("normas","1");
		response.sendRedirect("/"+var+"/misc/normas.html");
	}
Como se puede observar, busco el atributo "normas" en la sesión y si este no existe le pongo el valor 0. A continuación busco la cookie "normasleidas" y si la encuentro al atributo "normas" le doy un valor 2.

El siguiente paso es redireccionar a la página de las normas de uso solo en el caso de que el atributo "normas" valga 0 lo que implica que no se ha encontrado la cookie.

El siguiente código en la página de normas es el que se encarga de definir si las normas han sido aceptadas.

Código:
String url = request.getParameter("url");
if(url != null){

	Date now = new Date();
	String timestamp = now.toString();
	Cookie cookie = new Cookie ("normasleidas", "s");
	cookie.setMaxAge(1095 * 24 * 60 * 60);
	response.addCookie(cookie);
	HttpSession sesion = request.getSession(true);
	session.setAttribute("normas","2");
	session.removeAttribute("urlreq");
	response.sendRedirect(url);
}
En el código anterior con el parámetro "url" controlo si se han aceptado las normas, en cuyo caso guardo la cookie "normasleidas", establezco el atributo "normas" a 2 y redirecciono a la página que habiamos solicitado.

Como dije anteriormente tanto la página de las normas de uso como el resto de páginas usan la misma plantilla, estando el problema en que cuando visito la página de las normas de uso, si se encuentra la cookie correctamente, pero con todas las otras páginas, no lo hace.

He probado a poner un contador en el bucle donde busco la cookie, y he llegado a comprobar que al visitar la página de normas el request.getCookies() me devuelve más cookies que cuando visito cualquiera de las otras páginas, por lo que entra esas cookies que faltan, se encuenta la que interesa.

¿Alguien alguna idea de lo que puede esrar ocurriendo?

Saludos y gracias...
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 03:58.