JSP e Sessões não funciona após de acessar do login

Olá, pessoal!

Estou aprendendo alguns momento, mas não estou entendo que o prof ensinou isso sobre validação Sessao no usuário… mas já tentei várias programar e não funcionou… por exemplo primeiro acesso do usuario e verifica se for igual usuario e senha ok e passa na próxima pagina e trancou por comparar por vazio e está vazio. e também tentar acessar direito página sem acesso usuário e informar que deveria acessar do usúario e tbem não funcionou, apareceu que diz está logado sem acessar o usúario. veja os código basicamente em baixo.

Login

<center>
<form action="TesteLogin" method="get">
<table>
<tr><td>Nome:</td><td><input type="text" name="usuario"></td></tr>
<tr><td>Senha:</td><td><input type="password" name="senha"></td></tr>
<tr><td colspan="2"><input type="submit" value="Logar"></td></tr>
</table>
</form>
</center>

TesteLogin // Testar se comparar igual o usúario e senha passa próxima janela

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String usuario = request.getParameter("usuario");
		String senha = request.getParameter("senha");
		
		if(usuario.equals("adm") && senha.equals("123")){
			HttpSession sessao = request.getSession(true);
			sessao.setAttribute("username",usuario);
			response.sendRedirect("logado.jsp");
			System.out.println(sessao);
		} else {
			JOptionPane.showMessageDialog(null,"Erro de acesso! Digita novamente...");
			response.sendRedirect("Login.htm");
		}
	}

Logado.jsp // esse é acesso da página por usúario, se comprar sessao está vazio e informa por usuario e volta da pagina de login.

<body>
<%
	String sessao = (String) request.getAttribute("username");
if(sessao== null){
	JOptionPane.showMessageDialog(null,"Usúario não está logado!! \nAcesse...");
	response.sendRedirect("Login.htm");
}
%>

<h1>Você está logado!!!</h1>
</body>

Espero que vc explica sobre esse conteudo do sessao para eu entender melhor… obrigado!!!

Oi Pereira,

Imprime o valor que você esta recuperando em request.getAttribute(“username”).
Este valor esta sendo pego do request, porém o usuário foi posto na sessão.
Tenta fazer assim: request.getSession().getAttribute(“username”).

Tenta dar um nome melhor para o “username” recuperado, como “username” mesmo, pois esta “sessao” e de fato não é a sessão que você esta recuperando e se fosse não seria do tipo String. (:

Também fiquei meio com dúvida do uso do JOptionPane do Swing em uma aplicação web. Acho que você misturou um pouco os código né?

Ao invés de fazer o JOptionPane.showMessageDialog(null,“Erro de acesso! Digita novamente…”); faça System.out.println(“Erro de acesso! Digita novamente…”); e veja o que acontece no servidor. No mais nosso amigo WashingtonBotelho está correto.

Valeu

[quote=clunsde]Ao invés de fazer o JOptionPane.showMessageDialog(null,“Erro de acesso! Digita novamente…”); faça System.out.println(“Erro de acesso! Digita novamente…”); e veja o que acontece no servidor. No mais nosso amigo WashingtonBotelho está correto.

Valeu[/quote]

Olá,
só complementando, a propriedade JOptionPane não é usada exclusivamente para Java Desktop? Não entendí pq vc está usando com Java Web…

Abs,

Já mudei alguns que vocês me disseram… está ok! mas por exemplo acessar outra pagina sem acesso login e informar que tem logar o usúario e vai pagina de login. assim não funcionou corretamente. e ai vou tentar falar com professor…

obrigado pela ajudar…

Oi Pereira,

Qual o valor retornado em

String username = (String) request.getSession().getAttribute("username");

O que deu errado? Entrou no if, não faz o redirect?

A mensagem que ele não esta logado tem que ser feita na página de login. Quando o username for null você pode colocar no request usando o setAttribute() uma variável chama, por exemplo, “erro” com o a mensagem: “Você precisa estar logado para acessar o sistema!”. Lá na página de login se essa variável for diferente de null e diferente de vazio, você apresenta a mesma.

Tenta explicar melhor o que esta acontecendo ai que eu te ajudo pra você tirar 10 lá na aula. (:

[quote=WashingtonBotelho]Oi Pereira,

Qual o valor retornado em

String username = (String) request.getSession().getAttribute("username");

O que deu errado? Entrou no if, não faz o redirect?

A mensagem que ele não esta logado tem que ser feita na página de login. Quando o username for null você pode colocar no request usando o setAttribute() uma variável chama, por exemplo, “erro” com o a mensagem: “Você precisa estar logado para acessar o sistema!”. Lá na página de login se essa variável for diferente de null e diferente de vazio, você apresenta a mesma.

Tenta explicar melhor o que esta acontecendo ai que eu te ajudo pra você tirar 10 lá na aula. (:[/quote]

Já coloquei IF e redirect… mas não funcionou corretamente…

Esse é servelts que recebe usuario e senha e comparar se for igual manda o site logando, se nao faça senha novamente. veja em baixo.

	String usuario = request.getParameter("usuario");
	String senha = request.getParameter("senha");
		
		if(usuario.equals("adm") && senha.equals("123")){ // comparar se for igual a digitando
			HttpSession sessao = request.getSession(true); // criar a sessao
			sessao.setAttribute("username",usuario); // atribuir sessao no usuario
			response.sendRedirect("logado.jsp"); // que vai outra pagina
			System.out.println(sessao); // testar que gera a sessão
		} else { // se caso erro digito ou vazio
			System.out.println("Erro de acesso! Digita novamente..."); // mensagem
			response.sendRedirect("Login.htm"); // enviar a volta da pagina..
		}

Esse página que abrir quando for logado, se caso não logado envia para pagina de login.

<body>
<%
	String sessao = (String) request.getSession().getAttribute("username"); // recebe sessao do usuario e armazenar no atribuito sessao
if(sessao== null){ // testar comparar se sessao for vazio, se verdadeira, vai pagina de login para logar usuario. se está parace no site "vc está logado" em abixo
	System.out.println("Usúario não está logado!! \nAcesse..."); // mensagem
	response.sendRedirect("Login.htm"); // se nao está logado e vai para pagina.
}
%>

<h1>Você está logado!!!</h1>
</body>

Isso que eu não consegui testar entrar pagina direito que não logado e vai para pagina de login… Obrigado!!!

Oi Pereira,

Eu entendi o problema e o que você esta tentando fazer no seu código, porém gostaria de saber os valores na hora da execução para entender melhor o que esta acontecendo.

Por exemplo qual o valor que esta sendo retornado na sua variável “sessao”? Faz um System.out.println(sessao) e olha no console.
Se estiver vindo null não será executado o código dentro do bloco if, então você precisa focar nos valores recebidos para depois se preocupar com a lógica em cima deles, pois se eles estiverem errados nenhuma lógica funcionará, entendeu?

[quote=WashingtonBotelho]Oi Pereira,

Eu entendi o problema e o que você esta tentando fazer no seu código, porém gostaria de saber os valores na hora da execução para entender melhor o que esta acontecendo.

Por exemplo qual o valor que esta sendo retornado na sua variável “sessao”? Faz um System.out.println(sessao) e olha no console.
Se estiver vindo null não será executado o código dentro do bloco if, então você precisa focar nos valores recebidos para depois se preocupar com a lógica em cima deles, pois se eles estiverem errados nenhuma lógica funcionará, entendeu?[/quote]

Esse está funcionando corretamente… mesmo os códigos… pesquisei e testados… acabei de descobrir… tenta entrar site sem antes logar o usuario e ai deverá erro automático e vai pagina de login… se já logou antes e sessao será armazenado na próxima página direita e ai vão aparecer logado por causa já logou antes, somente sessao apaga até janela fecha ou apagar no configuação.

Obrigado!!

Agora vou pesquisar RemoverAtributte para Logout…

Oi Pereira,

Que bom que funcionou.
Quanto ao logout você pode invalidar a sessão:

request.getSession().invalidate();

Abraço e boa sorte nos estudos. (: