domingo, 13 de abril de 2008

Agregando el jsessionid a un HTML estático


Entre las múltiples razones para odiar Internet Explorer 7 está que por defecto deshabilita las cookies, así que mantener una sesión en Java requiere que siempre hagamos encodeURL o metamos en tags de c:url o html:link todos los vínculos.

Esto está chido cuando usamos servlets o jsp's pero, ¿qué pasa con los HTML's estáticos? Por ejemplo en OpenCms, en un artículo o un contenido tipo news.

La solución más sencilla que encontré es tomar un archivo de fuente javascript generado mediante JSP o bien embeder en la página principal del template, una variable javascript que almacene el sessionId. Por ejemplo:


<script type="text/javascript">
var jsess="<%=session.getId()%>";
</script>

Y después metemos esto con JavaScript a nuestros links, ejemplo:

<a href="http://www.blogger.com/shalala/" id="coso">Ir a shalala</a>
<script type="text/javascript">
var miLink = document.getElementById('coso');
miLink.href = miLink.href + ';jsessionid=' + jsess;
</script>


Obviamente se puede jugar con esto, por ejemplo:

<script type="text/javascript">

var links = document.getElementsByTagName("a");

for(i = 0; i < links.length; i++)

links[i].href = links[i].href + ";jsessionid=" + jsess;

</script>


Aunque esto no lo recomiendo mucho porque nunca sabemos si se pondrán links externos, y en ese caso poner un jsessionid puede causarle problemas a otros sistemas.

Espero que encuentren esta información de utilidad. Saludos,

4 comentarios:

  1. Hola man, gracias por el post, pero me intereso más en estos momentos por lo que mencionas al principio, es decir, necesito saber cómo pasar un valor(una variable) como un id de un jsp a otro jsp para realizar posteriormente una consulta en la base de datos; más exactamente necesito que después de loggearse un usario del tipo profesor, se muestren todos los cursos que tiene asignados únicamente ese profesor ( lo cual lo lograría verificando el id del profesor al hacer la consulta en la base de datos).

    En espera de tu respuesta, muchas gracias de antemano.

    ResponderEliminar
  2. Saludos, tu blog esta muy bien, gracias por éste post
    Creo ke necesito tu ayuda, necesito implmentar un caledar organizer en mi sitio pero no me anda y también ponerle I18n para ke los componentes se carguen en francés, pero no tengo ni idea, me puedes orientar porfavor?
    espero tu respuesta, muchas gracias de antemano
    mi proyecto es JEE, utilizo JPA y EJB3 con base de datos en Mysqlserver5, para la parte gráfica uso richfaces

    ResponderEliminar
  3. Buenos días Michael.

    No termino de entender el problema. A reserva de que pienses que estoy menospreciando la pregunta (en caso de que eso suceda te pido una disculpa), ¿no puedes pasar el id del profesor en el Query String de la URL para sacarlo con un request.getParameter() ?

    Saludos,

    ResponderEliminar
  4. Respecto a tu proyecto y la localización, te recomiendo echarle un ojo a Struts =) .

    ResponderEliminar

Deja tu comentario... Aquí!! Ahí al rato lo checo y lo apruebo.

Posts relacionados