Estava tentando criar uma seção aqui usando e consegui mas, estou com um problema na hora de encerrar a sessão, o que ocorre é o seguinte, eu tenho 2 páginas e uma servlet, quando dou o comando da página ir para a página dois, o método isNew() ja entra em ação e faz com que redirecione para a página um de novo, mas isso não deveria acontecer na primeiroa vez pois a sessão não foi nem iniciada ainda, só é pra acontecer depois que eu estiver na página dois e se tiverem passados 3 segundos que é quando a sessão espira.
Na primeira requisição aontece isso, mas quando você clica de novo, funciona.Alguem tem uma dica?
Sessão com HttpSession
19 Respostas
Tem algum código para mostrar?
tenho ja coloco
HttpSession session = request.getSession();
session.setMaxInactiveInterval(3);
System.out.println(session.getId());
System.out.println(session.getCreationTime());
if (session.isNew()) {
RequestDispatcher req = getServletContext().getRequestDispatcher("/telalogin.html");
req.forward(request, response);
} else {
RequestDispatcher req = getServletContext().getRequestDispatcher("/telafinal.jsp");
req.forward(request, response);
}
Já tentou colocar um tempo maior? Para ver se você tá conseguindo acessar a tempo para a session.isNew() retornar false.
ja sim, deu na mesma
Eu dei uma olhada na documentação do método isNew() e fala que o Cookie estiver desabilitado, sempre vai retornar true. Será que é isso?
Tira o “session.setMaxInactiveInterval(3);”, e vê se a sessão está sendo mantida, verificando a saída do session.getCreationTime()
Então, é que o que ocorre é o seguinte, funciona do jeito que eu quero depois de 3 segundos por exemplo a sesssão é invalidada e vai pra tela inicial, só que ese comportamebnto não aparece na da primeira vez, tipo assim:
eu clico e ao invés de ir pra telafinal.jsp vai pra telalogin.jsp de novo, dai, na segunda vez, começa a funcionar corretamente, vai pra telafinal.jsp e se eu recarregar a tela depois de 3 segundos ele manda pa telalogin.jsp
se eu tirar o “session.setMaxInactiveInterval(3)” a sessão nunca sera expirada, eu preciso que a sessão expire depois de x tempo
Mas de início não era para ir para tela de login? Pois a sessão é nova.
Sim, de inicio vai pra tela de login , mas no primeiro clique ele volta pra tela de login, do segundo em diante que fica do modo correto.
Esse seu código tá sendo executado aonde? Numa servlet?
Se for, como vc está acessando essa servlet?
a jsp de login acesa esse código que esta em uma servlet, e a servlet manda pra próxima página
Qual o link da servlet?
Está mapeado na jsp para “enviar”, e que acessa um método doPost, sempre quando eu debugo passa pelo doPost
esta mapeado para a action “enviar” que acessa um método dopost da servlet, sempre quando debuga passa pelo dopost
encerradno esse tópico, consegui fazer, a jsp não pode ser chamada diretamente, tem que ser chamando primeiro por uma servlet onde a seção inicial é criada.
E ae fera, blz? No meu ponto de vista, na verdade há um erro de lógica no fluxo das páginas. Veja bem, se o servlet que você criou está sendo chamado sempre da página inicial, então sempre haverá uma sessão existente: ou ela acabou de ser criada pelo container, ou ela já existe. Em ambos os casos é correto o usuário chegar à segunda página (telafinal.jsp). Portanto, a validação de session.isNew() não faz sentido neste caso.
Só para complementar, a validação que você criou faz sentido se você estiver em uma página intermediária (depois de estar logado) e o usuário está indo para uma outra página em que é obrigatório chegar lá já logado. Caso ele não esteja, aí sim você o envia para a página inicial de Login.