Ver Mensaje Individual
  #24 (permalink)  
Antiguo 19/09/2005, 14:37
Avatar de goncafa
goncafa
 
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Tema: Servlets/JSP - Sessiones
Pregunta: ¿Por que el identificador de session funciona en algunos navegadores y en otros no? ¿Como evito que la session se maneje con cookies si el usuario no las acepta?
Respuesta:
El motor de servlets intenta utilizar cookies para seguir la traza de ID de session.
En la respuesta HTTP escrita por un servlet que creó una session se encuentra una cabecera Set-Cookie con el ID de session en una cookie llama JSESSIONID

Set-Cokkie: JSESSIONID=rkbg6z27j1;Path=/jspr

Si el cliente acepta la cookie, luego la devuelve en las peticiones posteriores:

Cookie: JSESSIONID=rkbg6z27j1

Si esto ocurre, la petición del cliente puede ser asociada a la session sin más consideraciones por parte del servlet. Pero si el cliente no acepta las cookies, se pierde la session. Para evitar esto, la API del servlet tiene un mecanismo de retirada (fallback). Si fallan las cookies, utiliza la reescritura de URL. Esto es un poco más complicado para el programador por que significa que todas las direcciones URL escritas por el servlet deben llevar añadido el ID de session.
Pero como esto es innecesario y costoso si el cliente acepta las cookies, la reescritura de URL debe realizarse sólo si se sabe a ciencia cierta que el método de las cookies falla. Afortunadamente, la API del servlet tiene métodos que encapsulan toda esta lógica. La clase HttpServletResponse tiene los métodos encodeURL() y encodeRedirectURL(), que añaden el ID de session a una dirección URL sólo si es necesario:

String miURL = response.encodeURL("/servlet/nextServlet");
out.println("Haz clic <a href='" + miURL + "'> AQUI</a> para continuar");

Debe utilizarse encodeRedirectURL() con todas las direcciones URL pasadas al método response.sendRedirect() y encodeURL() con todas las demás.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo