Olá
Introdução
O protocolo HTTP (1.0) não mantém estado, isto é, cada vez que o cliente solicita uma página html é aberta uma conexão com o servidor web Apache, Tomcat ou outro qualquer. Há 3 modos de se manter as informações independente da conexão:
a) cookies = pequenino arquivo texto que o servidor envia ao browser e que o browser devolve quando visita de novo o mesmo site ou domínio que enviou o cookie.
b) URL reescrita = o cliente adiciona um dado que identifica a sessão do usuário ao fim de cada URL e o servidor identifica o cliente. Exemplo: http//www.estepost.com;jsessionid=1234
c) campos escondidos nos forms = Os forms html podem ter campos assim:
<input type=“HIDDEN” name=“jsessionid” value = “1234”>
A solução c exige que TODAS as páginas sejam construídas dinamicamente. Muito raramente é empregado para controle de sessão.
Os cookies de a funcionam direitinho e são muito bons. O problema é que alguns clientes teimam em não aceita-los. A solução b também é boa e funciona naqueles casos em que os browsers não aceitam cookies. Tanto a como b são soluções que exigem que todas as URLs retornem com as informações extras adicionadas. Assim se o usuário vier de um bookmark ou dos seus favoritos não virá a informação de sessão.
Mecanismo de sessão da API dos servlets
Tudo que falei antes foi para chegar até aqui que é onde está a explicação que eu queria dar:
Quando se trabalha com sessions a API dos servlets (e consequentemente dos JSPs) se encarrega do trabalho de enviar as URLs alteradas. Tenta enviar cookies e se o cliente não aceita cookies, automaticamente muda para o modo b de URL reescrita.
Assim sessions não são melhores ou piores do que cookies. Quando se usam sessions os cookies podem estar sendo usados por debaixo os panos.
[]s
Luca