management example dofilter java session tomcat cookies

example - java session management



Sesiones de apoyo sin cookies en Tomcat (5)

Actualmente estoy ejecutando una aplicación con las siguientes propiedades:

  • Basado en Java con Spring y Acegi
  • Corriendo en Tomcat 5

Necesito la capacidad de admitir sesiones de usuario sin cookies. ¿Podría alguien señalarme en la dirección correcta?

Gracias.


Como Matt b comentó, esto debería funcionar de la caja (Tomcat probará las cookies, y si eso falla, vuelva a codificar la sesión en la url). Sin embargo, esto no funcionará si usted mismo crea un enlace ''simple'' - siempre use un método como JSTL para que tomcat pueda agregar el parámetro de seguimiento a todas las direcciones URL.


Podrías rastrear por dirección IP, pero los servidores proxy (¿y NAT?) Podrían arruinarte.

Podría forzar a todas las URL a tener la sesión como parámetro y todas las formas como un campo oculto. Tal vez una etiqueta personalizada para generar URL podría ayudar aquí, pero no he trabajado mucho con taglibs.

Tendrá que considerar la seguridad: las personas pueden enviar enlaces a otras personas con el ID de la sesión, por lo que querrá tener una verificación de dirección IP para cada acceso para verificar que la dirección coincida con la sesión.



La respuesta completa a esta pregunta es una combinación de todas tus respuestas, así que voy a resumir:

  1. No es necesario configurar cookies = "false" en el archivo context.xml. La funcionalidad ideal es que tomcat use su identificación de sesión basada en url, que se usará de manera predeterminada si el usuario no admite las cookies.

  2. Cuando un usuario no tiene habilitadas las cookies, Tomcat identificará la sesión mediante el parámetro "JSESSIONID" desde la url de la solicitud. Un par de URL de muestra son las siguientes http://www.myurl.com;jsessionid=123456AFGT3 http://www.myurl.com;jsessionid=123456AFGT3?param1=value&param2=value2 Observe cómo la identificación de la sesión no es parte de la url cadena de consulta (este es un estándar j2ee)

  3. Para garantizar que el parámetro jsessionid se anexe a todas las URL de su solicitud, no puede tener referencias de URL simples. Por ejemplo, en JSTL, debe usar <c: url>. El servlet engine agregará automáticamente el jsessionid a la url si es necesario. Aquí hay un ejemplo:

    <% - esto es malo: -%> <a href = "page.html"> enlace </ a>

    <% - esto es bueno: -%> <a href = "<c: url value = ''page.html'' />"> enlace </ a>


La mejor manera es usar la reescritura de URL . Por lo tanto, cuando use request.getSession() , el container enviará el encabezado " Set-Cookie " para session-id en HTTP-response así como también session-id adjuntado a URL (pero debe usar response.encodeURL(session_info) para reescritura de URL).

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter pw=resp.getWriter(); HttpSession session=req.getSession(); pw.println("<html><body>"); pw.println("<a href=/""+resp.encodeURL("/session_info")+"/">Click</a>"); pw.println("</body></html>"); }