Sessão com HttpSession

19 respostas
X

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?

19 Respostas

M

Tem algum código para mostrar?

X

tenho ja coloco

X

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);
	    }
M

Já tentou colocar um tempo maior? Para ver se você tá conseguindo acessar a tempo para a session.isNew() retornar false.

X

ja sim, deu na mesma

M

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?

M

Tira o “session.setMaxInactiveInterval(3);”, e vê se a sessão está sendo mantida, verificando a saída do session.getCreationTime()

X

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

X

se eu tirar o “session.setMaxInactiveInterval(3)” a sessão nunca sera expirada, eu preciso que a sessão expire depois de x tempo

M

Mas de início não era para ir para tela de login? Pois a sessão é nova.

X

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.

M

Esse seu código tá sendo executado aonde? Numa servlet?

Se for, como vc está acessando essa servlet?

X

a jsp de login acesa esse código que esta em uma servlet, e a servlet manda pra próxima página

M

Qual o link da servlet?

X

Está mapeado na jsp para “enviar”, e que acessa um método doPost, sempre quando eu debugo passa pelo doPost

X

esta mapeado para a action “enviar” que acessa um método dopost da servlet, sempre quando debuga passa pelo dopost

X

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.

D

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.

D

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.

Criado 7 de abril de 2012
Ultima resposta 10 de abr. de 2012
Respostas 19
Participantes 3