Dúvidas com Sessões

Olá!

Programo ha algum tempo para java web, mas tenho algumas duvidas quanto as sessões de usuarios…

  1. Como garantir que não haverá cruzamento de sessões? Por exemplo, estou logado como usuário “X”, ao mesmo tempo que um “Y”.
    Qual a garantia que não entrarei na sessão do outro usuário? Há boas práticas para evitar que isso aconteça?

  2. Há algum jeito de monitorar sessões? Alguma API, algo nesse sentido? Ou apenas por debug?

Utilizo framework para desenvolvimento (Struts2) com base na apostila da caelum, gostaria de saber onde posso encontrar boas práticas para desenvolvimento e controle de
sessões de uma maneira mais aprofundada.

Obrigado! :slight_smile:

[quote=endedan]Olá!

Programo ha algum tempo para java web, mas tenho algumas duvidas quanto as sessões de usuarios…

  1. Como garantir que não haverá cruzamento de sessões? Por exemplo, estou logado como usuário “X”, ao mesmo tempo que um “Y”.
    Qual a garantia que não entrarei na sessão do outro usuário? Há boas práticas para evitar que isso aconteça?

  2. Há algum jeito de monitorar sessões? Alguma API, algo nesse sentido? Ou apenas por debug?

Utilizo framework para desenvolvimento (Struts2) com base na apostila da caelum, gostaria de saber onde posso encontrar boas práticas para desenvolvimento e controle de
sessões de uma maneira mais aprofundada.

Obrigado! :slight_smile:
[/quote]

Bom, para se aprofundar no tema eu recomendo que você se aprofunde em: protocolo HTTP, Cookies e a especificação Servlet. Vou adiantar um pouco a história …

A dificuldade em se trabalhar com sessões na Web é que o HTTP é um protocolo stateless, isso é, o protocolo HTTP não prevê o uso de sessões. Ou seja, você faz uma requisição com algum método HTTP (GET, POST, HEADER, TRACE, DELETE, etc…) e recebe uma resposta. O servidor HTTP não mantém nenhum controle sobre quem pediu o que e quando.

As aplicações Web simulam sessões com a ajuda dos cookies ou então de algum parâmetro de URL (no caso do Java, isso pode ser feito com o parâmetro jsessionid). Quando dentro do método service() do Servlet você pede para criar uma sessão, simplesmente o que é feito é: o servidor cria um UUID, associa um objeto Session a esse id, e envia o id para o cliente através de um cookie. Na próxima requisição o cliente envia esse id de volta para o server, de forma que o server pode encontrar o objeto Session adequado.

Sobre a sua preocupação em “misturar” dados … Bom, pra evitar problemas desse tipo é preciso tomar cuidado onde você registra atributos. Esses detalhes sobre setar cookies e localizar sessões através de Id’s é tarefa da API de Servlet, quanto a isso você pode ficar tranquilo que funciona. Só não vai funcionar se você por exemplo, setar dados específicos de uma sessão no contexto da aplicação.

rmendes08, obrigado pela explicação.

Vou pesquisar um pouco mais sobre o protocolo, mas ja me tranquilizou bastante.

Se alguem puder/quiser acrescentar mais sobre o assunto, fique a vontade.