Fazer logout no esquema do gmail

4 respostas
K

Fala pessoal!!

Estou desenvolvendo uma aplicação web e estou com problemas para fazer logout. O que eu faço e invalidar a session e passar um filtro que verifica a session em todas as jsp´s e servlets para verificar se o usuario está logado. Isso funciona bem se o usuário tentar acessar uma página via url sem estar logado (ele redireciona para o login). Caso o usuario esteja logado e der logout, ele é redirecionado para a página de login. Se ele apertar o botão voltar do browser, ele consegue visualizar uma página mesmo não estando logado mais. Tudo bem que se ele tentar clicar em um botao na pagina, o filtro pega essa requisição e bloqueia, mas o problema é o seguinte: o cara dá logout e clica em voltar no browser, então ele visualiza a página anterior sem estar logado. Ai ele clica em atualizar e o browser pergunta se ele quer reenviar as informações para exibir a página. Entao o cara clica sim e consegue se logar novamente, sem digitar a senha e usuário!!!

Já tentei coisas do tipo: no-cache (inclusive excluo os dados pessoais armazenados no browser manualmente, e mesmo assim ele consegue reenviar essas informações), evitar que o usuario volte para a pagina (meio porco, porque fiz via javascript e dá para burlar isso)

Gostaria de fazer um sistema de logout ao estilo do gmail: você da um logout e depois não consegue retornar à página anterior clicando no voltar do browser. Muitos outros sites fazem isso também
Alguém saberia me informar como isso é feito??

4 Respostas

robinsonbsilva

Jovem, tive esse problema também e a solução que foi feita é a seguinte, ao logar seto na sessão um “objeto” exemplo “UserLogado”, ao fzer o Logoff eu removo esse e outras que estejam na sessão, caso a pessoa de um “Back” no browser, ele até volta ao “menu principal”, mas a validação é feito no “action” e eu verifico a existencia deste objeto, caso esteja nulo eu o redireciono para a tela de Login…

No meu caso, eu me certifiquei de “Limpar a Sessão”.

K

Boa solução!!Criando um objeto na sessão na hora do login e depois retirando esse objeto da sessao vai forçar que o login só seja feito através da pagina de login. Mesmo que o browser tente reenviar o usuario e senha, esse objeto não estará na session. Assim dá para impedir as funcionalidades da aplicação

Obrigado, isso resolveu 80% do problema (bloquear as funcionalidades da aplicação). Mas o que ainda estou quebrando a cabeça é para dar um jeito de impedir a visualização da página. Isso é importante pelo seguinte motivo: se um usuario acessa a aplicação de um computador público e dá logout mas se esquece de fechar o browser e outra pessoa volta na página, consegue ver informações que podem ser sigilosas ou particulares da pessoa. Claro que a probabilidade de isso ocorrer (outra pessoa querer voltar) e ainda mais da informação vista ser útil para essa pessoa estranha é mínima (tudo bem, ela pode ver suas mensagens particulares, como um e-mail, mas o que ela vai fazer com isso??). Porém, vamos dizer que a aplicação ainda deixa brechas na segurança

Alguém tem mais alguma idéia para completar a solução de nosso amigo robinson?

L

Setando os headers, de todas as páginas, como:

response.setHeader("Cache-Control", "no-store");
response.setHeader("Cache-Control", "no-cache");

não resolve o problema?

K

Humm, interessante!! Funcionou, obrigado!
Eu estava tentando a mesma idéia, porém com tags de html
Não sei porque isso não funcionava no firefox
Mas se usar o setHeader ao invés da tag funciona!
Obrigado!

Criado 16 de julho de 2008
Ultima resposta 16 de jul. de 2008
Respostas 4
Participantes 3