Sei que não é muito comum esse tipo de pergunta :oops: , mas tem como fazer um logoff sem utilizar Session, o professor so disse que poderia fazer com matéria dada em sala( eu acho que ele esqueceu isso sim) eu consegui fazer o Login sem Session mas o logOff tá muito tenso, se alguem tiver alguma dica ai…
Obrigado!
Como você mantém a sessão do usuário ativa após o login?
da uma uma olhada nas minhas classes, eu utilizei um List para simular um Session, ,eu sei que é incorreto mas nao tinha outro modo.
Classe de Conexao e Consulta SQL
package usuarioConecao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;
import usuarioM.Usuario;
/**
*
* @author Merá
*/
public class conexaoBD {
private static Connection conexao = null;
public Connection getConnection(){
try{
Class.forName("org.postgresql.Driver");
conexao = DriverManager.getConnection("jdbc:postgresql://localhost:5432/trabalho", "postgres", "postgres");
}catch(Exception e){
e.printStackTrace();
}
return conexao;
}
public Usuario getUsuario(int cod_user,String senha){
try{
Connection conn = this.getConnection();
String sql = ("select * from usuario where cod_user = ? and senha = ? ;");
PreparedStatement prepState = conn.prepareStatement(sql);
prepState.setInt(1,cod_user);
prepState.setString(2,senha);
ResultSet resSet = prepState.executeQuery();
if(resSet.next()){
Usuario dadosLogin = new Usuario();
dadosLogin.setCod_user(cod_user);
dadosLogin.setSenha(senha);
dadosLogin.setNome_user(resSet.getString("nome_user"));
return dadosLogin;
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
[B] Classe que Valida o Login[/B]
[code] package login;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import usuarioConecao.conexaoBD;
import usuarioM.;
/**
*
-
@author Merá
*/
public class validaLogin extends HttpServlet {
static List listaUsuario = new ArrayList();
@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
PrintWriter out = resp.getWriter();
Usuario user = new Usuario();
String login = req.getParameter("login");
user.setCod_user(Integer.parseInt(login));
String senha = req.getParameter("senha");
user.setSenha(senha);
listaUsuario.add(user);
try{
conexaoBD userModel = new conexaoBD();
user = userModel.getUsuario(Integer.parseInt(login),senha);
}catch(Exception e){
e.printStackTrace();
}
if(user==null){
listaUsuario.clear();
out.print("<html>");
out.print("<body>");
out.print("<H1>USUARIO NAO ENCONTRADO </H1><br><br>");
out.print("<a href = 'loginUsuario.html'> Voltar ao Login</a >");
out.print("</body>");
out.print("</html>");
}else{
List<Usuario> codLista = new ArrayList();
String cod = req.getParameter("login");
user.setCod_user(Integer.parseInt(cod));
codLista.add(user);
out.print("<html>");
out.print("<head>");
for( Usuario print : codLista){
out.print("<a href='logado.html'"+print.getCod_user()+"> aff </h1></a>");
}
out.print("</body>");
out.print("</html>");
codLista.clear();
}
}
}
[/code]
[B] Classe Modelo Usuario[/B]
[code] ackage usuarioM;
/**
*
}[/code]
Desculpe te desapontar mas você não consegue simular uma sessão apenas com um list.
O que você fez foi nada mais do que verificar se o usuário existe no DB.
Se esse usuário for em outra página, o servidor não terá a mínima idéia de quem ele é.
Você pode fazer o controle de sessão de 3 modos:
- campo hidden na página
- cookie
- session -> mas esse vc não pode usar. [=
Entao no caso eu enviaria o cod_ user por parametro para uma outra pagina jsp que faria a consulta dos Dados do usuario no BD, isso é correto?
[quote=severuspedreirus]Entao no caso eu enviaria o cod_ user por parametro para uma outra pagina jsp que faria a consulta dos Dados do usuario no BD, isso é correto?[/quote]Você terá que fazer isso a todo momento. [=
Se a requisição for sem o ID e a senha login inválido. [=
Hahah, vendo agora acho que nao tem como fazer entao, meu professor nao passou nenhum dos metodos que voce mencionou, so passou alguma coisa em jsp(duas aulas, quase nada), lists( que nao ajuda em nada pra servlets por questao de seguranca) e implementacao em Servlet e nada mais… porq se fosse livre ia ser sussa de fazer o login com Session, mas fazer o que??? 
Nao sei se voce pode me da uma dica de como fazer, kkkk que tá dificil tá…
Valeu por responder rápido e tentar ajudar ! Herbert
Se o que precisa é de uma solução simplória para entregar ao professor, até que dá para fazer usando uma lista.
[color=red]AVISO: Nunca use essa solução em uma aplicação de verdade, ela é totalmente furada!!![/color]
Use uma lista estática representando os usuários logados, a lista será vista em todas as requisições enquanto o servidor de aplicação estiver no ar. Isso você já fez, mas tem alguns erros de lógica:
Vc implementou assim:
- Insere o usuário.
- Pesquisa no banco, se ele não existir LIMPA A LISTA DERRUBANDO TODO MUNDO QUE ESTIVER LOGADO
- Se existir faz algumas coisas esquisitas, como criar uma outra lista com um único elemento e exibi-la na resposta.
Para funcionar deveria ser mais ou menos assim:
- Pesquisa o usuário no banco.
- Se ele existir, cria o objeto Usuario (a partir dos dados no banco) e insere na lista static.
- Se não existir, mostra mensagem de erro e não mexe na lista static.
Quando tiver isso funcionando, a solução para o logout será bem trivial: basta remover o usuário da lista e pronto, ele não está mais logado.
Caramba, não é que deu certo o ruim é que que o código fica feião, eueheu mas valeu ai gomesrod