Trabalhando com sessões web.

fevereiro 4, 2007 às 9:09 pm | Publicado em JEE | Deixe um comentário

O protocolo http usa conexões stateless. O browser abre uma conexão com o servidor, faz a solicitação, o servidor envia a resposta e fecha a conexão. Portanto a conexão existe para uma única solicitação/resposta.

A idéia da sessão web é manter o estado do usuário entre várias conexões. Na primeira conexão, o servidor gera um único session ID para o cliente e a devolve juntamente com a resposta. Nas próximas conexões, o cliente envia junto com a solicitação o seu session ID o que permite ao servidor identificá-lo. Por padrão a troca de session ID é feita utilizando cookie.

Aí que começa o problema, o cliente (browser) pode estar configurado para não aceitar cookie. Portanto a troca do session ID através de cookies não é garantido e pode não funcionar em 100% dos browsers. Para estes casos, a solução é a reescrita de URL. O session ID é enviado no final de cada URL da aplicação.

Ex: http://www.uol.com.br/index.do;jsessionid=123123123231

A classe HttpServletResponse possui um método que acrescenta o session ID automaticamente em uma URL:

@Override

protected void doGet(HttpServletRequest pReq, HttpServletResponse pRes) throws ServletException, IOException {

PrintWriter out = pRes.getWriter();

out.print(“<a href=\”” + pRes.encodeURL(“URL”) + “>Link</a>”);

out.flush();

}

O método encodeURL adiciona no final da URL o session ID caso o cliente não aceite cookie. Se o cliente aceitar cookie, nada muda na URL.

Mas eu não escrevo HTML dentro de um servlet? Como fazer isso em uma JSP?

Simples, a taglib “core” possui a tag “url” que também acrescenta o session ID automaticamente em uma URL.

<a href=”<c:url value=”URL”/>”>asdad</a>

Resumindo:

  • Se você escreve html dentro do servlet, sempre utilize encodeURL para todas as urls.
  • Se você é mais esperto e utiliza jsp para montar o html, utilize a tag “<c:url/>”.

Estas duas técnicas garantirá que o session ID seja trocado em 100% dos browsers, lembrando que o session ID será adicionado na URL somente se o browser não aceitar cookie.

Anúncios

Deixe um comentário »

RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Crie um website ou blog gratuito no WordPress.com.
Entries e comentários feeds.

%d blogueiros gostam disto: